如何在mongodb中从数组中查找数据

时间:2013-02-23 13:48:20

标签: javascript node.js mongodb

我有这样的集合:

{
    "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}}`,

如何找到?

2 个答案:

答案 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()