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

Query specific fields of mongoDB using node.js

在下面的代码中,查询为我提供了所有字段。我只想查询 _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);
  });
};

只查询和return特定字段,这是正确的请求:

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

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

更多信息在这里:http://docs.mongodb.org/manual/reference/method/db.collection.find/

documentation 之后,您正在使用函数 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);
  });

如果您使用的是最新的 nodejs mongodb 驱动程序 3.0 或更高版本,请尝试此代码:

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

在MongoDB Node.js驱动程序v3.1及以上:

Collection.find({}, {
   projection: {
     _id: false,
     someField: true
   }
});

find/findOne 函数的第二个参数是 options。它支持限制、排序、投影和更多过滤器。

来源:http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#findOne

您可以使用下面的代码

enter code here`collection.find({}, { projection: {_id:1, serialno: 1}}