2013-02-23 31 views
0

從陣列中的數據我有收集這樣的:如何找到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}}, 
    ] 
} 

我想找到那個給objid是存在於mywants陣列與否。然後,如果存在該OBJID我希望現有對象身份證件到我的回調函數,所以我已經試過這樣

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

怎麼找?

回答

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/

+0

如果我使用像上面我得到了這個錯誤SyntaxError:意外的令牌{ – silvesterprabu 2013-02-23 15:06:42

+0

我編輯了我的答案並省略了內括號,請檢查它現在是否正在工作。 – nutlike 2013-02-23 15:12:11

0

你在你的代碼中有錯字,它不清楚你想要什麼。根據你的錯字和輸出的樣本,你想(再次錯字)我認爲這是你的意思:

- 你正在做一個名稱查找:「銀」,並希望返回mywants._id字段(有錯字)用那個語法。

相反,我認爲你的意思是:尋找

的名字: 「銀」 與 「mywants._id」:someSpecificId

和相應的輸出mywants項:

db.collection.find({"name":"silver","mywants._id":objid}, {"mywants.$":1, _id:0}).pretty()