如何使用MongoDB-Node.JS原生驱动器通过查询从MongoDB中获取字段时重命名/别名字段?

考虑下面的代码,我正在使用它从本地MongoDB服务器获取数据。

var Db = require('mongodb').Db, MongoClient = require('mongodb').MongoClient, Server = require('mongodb').Server, ReplSetServers = require('mongodb').ReplSetServers, ObjectID = require('mongodb').ObjectID, Binary = require('mongodb').Binary, GridStore = require('mongodb').GridStore, Code = require('mongodb').Code, BSON = require('mongodb').pure().BSON, assert = require('assert'); var db = new Db('test', new Server('localhost', 27017)); db.open(function(err, db) { db.createCollection('simple_limit_skip_find_one_query', function(err, collection) { assert.equal(null, err); collection.insert([{a:1, b:1}, {a:2, b:2}, {a:3, b:3}], {w:1}, function(err, result) { assert.equal(null, err); collection.findOne({a:1}, {fields:{b:1}}, function(err, doc) { // I got the read document in the object 'doc' }); }); }); }); 

现在,我想重新命名一个字段名称而只检索(而不是在数据库),例如与上面的代码,我有一个字段名为b在返回的对象doc我希望它是baseID而不是b

有没有办法做到这一点?

注意:我无法对检索到的对象doc进行重命名字段的操作,如JSON密钥重命名。 我希望它被查询和MongoDB将相同。

使用MonogDB的聚合框架 (但是您需要将MongoDB服务器实例升级到> = 2.1)。

以上是上述例子的精髓

 var Db = require('mongodb').Db, MongoClient = require('mongodb').MongoClient, Server = require('mongodb').Server, ReplSetServers = require('mongodb').ReplSetServers, ObjectID = require('mongodb').ObjectID, Binary = require('mongodb').Binary, GridStore = require('mongodb').GridStore, Code = require('mongodb').Code, BSON = require('mongodb').pure().BSON, assert = require('assert'); db.open(function (err, db) { if (err) console.dir(err); db.createCollection('simple_limit_skip_find_one_query', function (err, collection) { if (err) console.dir(err); collection.insert([{ a: 1, b: 1 }, { a: 2, b: 2 }, { a: 3, b: 3}], { w: 1 }, function (err, doc) { if (err) console.dir(err); collection.aggregate([ { $project: { a: 1, _id:0, baseID: "$b" } } ], function (err, doc) { if (err) console.dir(err); console.log(doc); }); }); }); }); 

输出:

 [ { a: 1, baseID: 1 }, { a: 2, baseID: 2 }, { a: 3, baseID: 3 }]