0

我有这样的收藏:

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

我想找到给定的 objid 是否存在于 mywants 数组中。然后,如果存在那个 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}}`,

怎么找?

4

2 回答 2

1

你必须打电话

collection.find({"name":"silver", "mywants._id":objid}).toArray(…)

代替

collection.find({"name":"silver"},{"mywants._id":objid}).toArray(…)

. 前一个表示具有两个表达式(“name”:“silver” AND “mywants._id”:objid)的查询,而后一个是一个表达式(“name”:“silver”)和一个投影(“mywants._id” ":objid) [控制要返回的字段]。更多信息请访问http://docs.mongodb.org/manual/reference/method/db.collection.find/

于 2013-02-23T14:46:49.873 回答
0

您的代码中有错字,不清楚您想要什么。根据您想要的拼写错误和输出示例(再​​次输入拼写错误),我认为这就是您的意思:

-您正在查找 name:"silver" 并希望使用该语法返回 mywants._id 字段(有错字)。

相反,我假设您打算找到:

名称:“silver”和“mywants._id”:someSpecificId

并输出相应的 mywants 条目:

db.collection.find({"name":"silver","mywants._id":objid}, {"mywants.$":1, _id:0}).pretty()
于 2013-02-23T15:31:44.123 回答