使用node.js查询MongoDB的特定字段

12
在下面的代码中,查询语句会返回所有字段。我只想查询 _id 和 serialno。该怎么做?
模式
var DataSchema = new Schema({
  serialno: String,
  info: String,
  active: Boolean,
  content: String
});

查询

// Get list of datas
exports.index = function(req, res) {
  Data.find(function (err, data) {
    if(err) { return handleError(res, err); }
    return res.json(200, data);
  });
};

dataModel.find({ _id : 123456 }, { serialno : 1 }) - Ashok
5个回答

32

如果您正在使用最新的Node.js MongoDB驱动程序3.0或更高版本,请尝试使用以下代码:

Data.find({}).project({ _id : 1, serialno : 1 }).toArray()

非常感谢。其他答案都不能正常工作。 - user10124491
是的!就是这个! - Pamela Sillah
3
".findOne(...).project is not a function" 的翻译是:".findOne(...).project不是一个函数"。 - Yeats

9

仅查询和返回指定字段,下面是正确的请求:

Data.find({}, { _id : 1, serialno : 1 }, function (err, data) {
  if(err) { return handleError(res, err); }
  return res.json(200, data);
});

第二个参数params是投影参数,在这个对象中,你可以设置要返回或隐藏的字段。

更多信息请查看:http://docs.mongodb.org/manual/reference/method/db.collection.find/


解决了我的问题。我会将其标记为正确答案。 - Rohan Sharma
1
这将返回所有字段。回答错误。 - Yeats

3

哈哈,MongoDB 的愚蠢更改真是无处不在。这甚至不在他们的官方文档中。而且这毫无意义。投影?真的吗? - Yeats

1
您可以使用以下代码。
enter code here`collection.find({}, { projection: {_id:1, serialno: 1}}

1

根据文档,您正在使用函数collection.find(query[[[, fields], options], callback]);

因此,您需要指定fields参数:

Data.find(null, { "_id": true, "serialno": true }, function (err, data) {
    if(err) { return handleError(res, err); }
    return res.json(200, data);
  });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接