我对mongo和nodejs很新 我的查询结果是json,我只想将结果作为http请求返回,如下所示:
app.get('/itesms', function(req, res) {
items.find().toArray(function (err, array) {
res.send(array);
})
});
它有效,唯一的问题是我想从结果中隐藏_id字段(递归)。 有什么建议以优雅的方式做到这一点吗?
答案 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);
希望这会有所帮助。