mongoose,select一个特定的领域与查找

我试图只select一个特定的领域

exports.someValue = function(req, res, next) { //query with mongoose var query = dbSchemas.SomeValue.find({}).select('name'); query.exec(function (err, someValue) { if (err) return next(err); res.send(someValue); }); }; 

但在我的JSON响应我也收到_id,我的文档架构只有两个字,_id和名称

 [{"_id":70672,"name":"SOME VALUE 1"},{"_id":71327,"name":"SOME VALUE 2"}] 

为什么???

_id字段总是存在,除非您明确排除它。 这样做使用-语法:

 exports.someValue = function(req, res, next) { //query with mongoose var query = dbSchemas.SomeValue.find({}).select('name -_id'); query.exec(function (err, someValue) { if (err) return next(err); res.send(someValue); }); }; 

或者明确地通过一个对象:

 exports.someValue = function(req, res, next) { //query with mongoose var query = dbSchemas.SomeValue.find({}).select({ "name": 1, "_id": 0}); query.exec(function (err, someValue) { if (err) return next(err); res.send(someValue); }); }; 

现在有一个更简单的方法:

 exports.someValue = function(req, res, next) { //query with mongoose dbSchemas.SomeValue.find({}, 'name', function(err, someValue){ if(err) return next(err); res.send(someValue); }); //this eliminates the .select() and .exec() methods }; 

如果您希望大部分Schema fields并且只想省略几个字段,则可以在字段name加上- 。 对于第二个参数中的"-name" ,文档中不会包含name字段,而此处给出的示例在返回的文档中包含name字段。

在Mongoose中使用Native MongoDB代码有更好的方法来处理它。

 exports.getUsers = function(req, res, next) { var usersProjection = { __v: false, _id: false }; User.find({}, usersProjection, function (err, users) { if (err) return next(err); res.json(users); }); 

}

http://docs.mongodb.org/manual/reference/method/db.collection.find/

注意:

var usersProjection

此处列出的对象列表将不会被退回/打印。

 db.someschema.find( { }, { name: 1 } ).exec(function(err,Result){ var NameArray = Result; console.log(NameArray); }) 

输出:

 [ {"name":"peter"}, {"name":"john"}, {"name":"joseph"} ]