从mongo结果中删除_id

时间:2012-03-07 12:05:58

标签: node.js mongodb

我对mongo和nodejs很新 我的查询结果是json,我只想将结果作为http请求返回,如下所示:

app.get('/itesms', function(req, res) {
  items.find().toArray(function (err, array) {
    res.send(array);
  })
});

它有效,唯一的问题是我想从结果中隐藏_id字段(递归)。 有什么建议以优雅的方式做到这一点吗?

3 个答案:

答案 0 :(得分:26)

试试这个解决方案:

app.get('/itesms', function(req, res) {
  items.find({}, { _id: 0 }).toArray(function (err, array) {
    res.send(array);
  })
});

答案 1 :(得分:2)

通常的.find({}, {projection:{_id:0}})方法对我不起作用,所以我去找了another SO answer,发现在Mongo API的第3版中,您需要这样写:{{1 }}。因此,例如:

let docs = await db.collection("mycol").find({}, {projection:{_id:0}}).toArray();

似乎(至少在nodejs API中)您也可以这样编写:

let docs = await db.collection("mycol").find({}).project({_id:0}).toArray();

答案 2 :(得分:0)

问题是您无法投影包含和排除的内容,即您无法使用“项目”语句运行查询,该语句声明应在响应中包含的内容以及必须从响应中排除的内容。 来自MongoDB documentation

除了排除_id字段外,投影不能同时包含包含和排除规范。在明确包含字段的投影中,_id字段是唯一可以明确排除的字段。

我处理此问题的方法是在返回响应之前进行到流程的最后:

const dbObjectJSON = dbObject.toJson();
delete dbObjectJSON._id;
delete dbObjectJSON.__v;
...
response.json(dbObjectJSON);

希望这会有所帮助。