【问题标题】:Query specific fields of mongoDB using node.js使用 node.js 查询 mongoDB 的特定字段
【发布时间】:2015-04-24 13:03:58
【问题描述】:

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

标签: node.js mongodb mongoose


【解决方案1】:

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

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

【讨论】:

  • 非常感谢。其他答案都不能正常工作。
  • 是的!就是这个!就是这个!
  • .findOne(...).project is not a function。错误的答案。
【解决方案2】:

要查询并只返回特定字段,这是正确的请求:

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

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

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

【讨论】:

  • 解决了我的问题。将标记为正确答案。
  • 这将返回所有字段。错误的答案。
【解决方案3】:

在 MongoDB Node.js Driver 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

【讨论】:

  • 哈哈 mongodb 真是到处都是愚蠢的变化。这甚至不在他们的官方文档中。这没有任何意义。投影?真的吗?
【解决方案4】:

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);
  });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-20
    • 2016-07-06
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 2011-06-04
    相关资源
    最近更新 更多