5

我有一个具有以下结构的文档:

[{
    "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中做到这一点?

4

1 回答 1

10

您需要使用 $elemMatch 运算符:

db.collection.find({items:
                     {$elemMatch:{
                           sent_to_lab:{$exists:true},
                           received_from_lab:{$exists:false}}
})

这是查询 $elemMatch - 如果您只想取回与条件匹配的项目(而不是整个文档与整个数组),那么您可以类似地使用投影 $elemMatch 运算符。

于 2013-03-02T01:58:01.890 回答