1
我想獲取符合我的條件的子文檔。MongoDB elemMatch不能正常工作
我的MongoDB的查詢這樣的:
db.SCSIssue.find(
{ _id: ObjectId("5439a2992ea8cc0f70feef2d") },
{ Statuses: { $elemMatch: { StatusID: { $gte : NumberLong(521055087020736513) } } } }
)
我的架構類似的:
{
....
"_id": ObjectId("5439a2992ea8cc0f70feef2d"),
....
"Statuses": [{
....
"StatusID": NumberLong(525623822633172993),
},{
....
"StatusID": NumberLong(521055087020736513),
},{
....
"StatusID": NumberLong(521060802959532033),
}]
....
},
{
....
"_id": ObjectId("543c04662ea8cd11ec4dda5f"),
....
"Statuses": [{
....
"StatusID": NumberLong(535623822633172993),
},{
....
"StatusID": NumberLong(541055087020736513),
},{
....
"StatusID": NumberLong(551060802959532033),
}]
....
},
....
查詢結果:
{
"_id" : ObjectId("5439a2992ea8cc0f70feef2d"),
"Statuses" : [{
....
"StatusID": NumberLong(525623822633172993),
....
}]
}
預期結果:
{
"_id" : ObjectId("5439a2992ea8cc0f70feef2d"),
"Statuses" : [{
....
"StatusID": NumberLong(521055087020736513),
},{
....
"StatusID": NumberLong(521060802959532033),
}]
}
簡而言之,我想獲取大於或等於我的條件和相同時間的數組(子狀態)中的子文檔,這些_id等於我的條件。我讀了很多關於這個的答案。他們都喜歡我的問題,但在我的情況下,它沒有預期的工作。
我錯過了什麼? 謝謝。
謝謝你的回答。我還有一個關於你的查詢的問題。爲什麼你使用「Statuses.StatusID」匹配兩次?有什麼技巧嗎? – Dreamcatcher 2014-11-24 20:44:32
在初始匹配操作階段添加條件將防止以下不必要的展開和匹配操作符,如果文檔沒有具有匹配的statusId的狀態子文檔。 – BatScream 2014-11-24 21:09:35