代码之家  ›  专栏  ›  技术社区  ›  poundifdef

Mongodb:找到至少有一个数组元素匹配的文档?

  •  5
  • poundifdef  · 技术社区  · 11 年前

    我有一份结构如下的文件:

    [{
        "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 数组符合我的条件。

    我怎么能在蒙戈做到这一点?

    1 回复  |  直到 11 年前
        1
  •  11
  •   Asya Kamsky    11 年前

    您需要使用$elemMatch运算符:

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

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