In NodeJS, how to output results from mongodb with different field names?

aggregation-framework, javascript, mongodb, monk, node.js

Solution

If you are using monk as you appear to be then you can access the underlying node native driver collection type via the `.col` accessor on your selected collection object:

  var db = require('monk')('localhost/test')
    , collection = db.get('example');

  collection.col.aggregate(
    [
      { "$project": {
        "_id": 0,
        "ObjectID": "$_id",
        "DisplayText": "$text"
      }}
    ],
    function(err,result) {

      console.log( JSON.stringify( result, undefined, 4 ) );

    }
  );

Note that methods such as `.aggregate()` retrieved in this way are not wrapped in the promise object as the standard monk collection objects are. But at least this shows you how to access and use `$project` to re-shape your document.

Problem

I'm using nodejs to query mongodb and want to output json with customized field names. For example, original json from MongoDB maybe ``` {id:1, text:"abc"} ``` I'd like to output it as ``` {ObjectID:1, DisplayText:"abc"}; ``` I understand MongoDB has the $project operator in its aggregate framework but not sure how to use them in NodeJS. The mongodb nodejs packages I'm using are ``` var mongo = require('mongodb'); var monk = require('monk'); var db = monk('server:port/mydb'); ``` Appreciate any advice on this.

Original source

Related problems