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