Mongodb:找到至少有一个数组元素匹配的文档?
问题描述:
我有以下结构的文档:Mongodb:找到至少有一个数组元素匹配的文档?
[{
"items": [
{
"sent_to_lab": 123,
"received_from_lab": 456,
},
{
"sent_to_lab": 123,
},
]
}
... more orders ...
]
我想取其中至少一个项下列条件匹配的所有订单:
'$and': [
{'items.sent_to_lab': {'$exists': True}},
{'items.received_from_lab': {'$exists': False}},
]
因此,在这种情况下,我会喜欢返回上述项目,因为至少有一个items
数组元素符合我的标准。
我该如何在mongo中做到这一点?
答
您需要使用$ elemMatch操作:
db.collection.find({items:
{$elemMatch:{
sent_to_lab:{$exists:true},
received_from_lab:{$exists:false}}
})
这是查询$ elemMatch - 如果你只是想找回那种匹配的条件的项目(而不是与整个阵列整个文档)那么您可以同样使用投影$ elemMatch运算符。
这非常有帮助,谢谢!在这种情况下,我确实需要整个文档。但似乎我现有的查询确保数组中的* all *元素与条件匹配,而不是实际上“一个或多个” – poundifdef 2013-03-02 03:26:30
,这不是数组在MongoDB中的工作方式。您的查询表示返回任何子文档已发送到任何文档,并且任何子文档都没有received_from_lab。这意味着您的查询将返回包含两个子文档的文档,一个是已发送和已接收的文档,另一个是两个都没有(!)elemMatch将它们合并,以便它们应用于相同的子文档,这正是我理解您的用例的原因。 – 2013-03-02 12:45:55
经过一番捣鼓之后,我发现你是对的,'$ elemMatch'正是我所期待的。非常感谢它。 – poundifdef 2013-03-04 19:42:12