我有这样的集合:
{
"name":"silver",
mywants:[
{"_id":objid(545454ddfdf5),mark:{"english":100,"math":100,"science":100}},
{"_id":objid(5878784dfd5d),mark:{"english":100,"math":100,"science":100}},
{"_id":objid(5454dfd44545),mark:{"english":100,"math":100,"science":100}},
{"_id":objid(541dfee88245),mark:{"english":100,"math":100,"science":100}},
]
}
我想发现mywants数组中存在objid是否存在。然后,如果存在objid我希望存在对象id文档到我的回调函数,所以我尝试了这样
collection.find("{"name":"silver"},{"mywants._id":objid}).toArray(function(err,res)
{
console.log(JSON.stringify(res));
})
But, I got output like
[{"Mywant":[{"_id":"5128b9bc046802720b000003"},
{"_id":"5128c190046802720b000004"},
{"_id":"5128c359175e1aa80b000001"}],"_id":"5128b71455e4e0540b000002"}
]
但我想要这样
{"_id":objid(545454ddfdf5),mark:{"english":100,"math":100,"science":100}}`,
如何找到?
答案 0 :(得分:1)
你必须致电
collection.find({"name":"silver", "mywants._id":objid}).toArray(…)
而不是
collection.find({"name":"silver"},{"mywants._id":objid}).toArray(…)
。前一个表示带有两个表达式的查询(“name”:“silver”和“mywants._id”:objid),而后者是一个表达式(“name”:“silver”)和一个投影(“mywants._id” “:objid)[控制要返回的字段]。有关详情,请访问http://docs.mongodb.org/manual/reference/method/db.collection.find/。
答案 1 :(得分:0)
你的代码中有拼写错误,但你不清楚你想要什么。基于你的错误和输出你想要的样本(再次拼写错误)我认为这就是你的意思:
- 你正在寻找一个名字:“silver”,并希望用这种语法支持mywants._id字段(有拼写错误)。
相反,我认为你的意思是找到:
name:“silver”AND“mywants._id”:someSpecificId
并输出相应的mywants条目:
db.collection.find({"name":"silver","mywants._id":objid}, {"mywants.$":1, _id:0}).pretty()