如何在嵌套数组中搜索包含具有特定值的对象的文档

时间:2016-06-06 22:38:01

标签: mongodb mongodb-query aggregation-framework

这是文档结构

{
    someProp: 'string value',
    options:{
      environment: [{value: 'Gym'}, {value:'Water'}, {value: 'Home', label:'other string'}]
    }
}

我需要过滤options.environment包含{value: 'Gym'}{value: 'Water'}的所有文档。

使用mongodb汇总$match或其他策略($unwind / $group$map)进行此查询的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以使用$all查询运算符执行此操作:

{
    "options.environment.value": {
        "$all": ["Gym", "Water"]
    }
}

一般来说,MongoDB在运行查询之前会使结构变得扁平化。在您的情况下,这意味着您正在有效地搜索形状如下的文档:

{
    "someProp": "string value",
    "options": {
        "environment": {
            "value": ["Gym", "Water", "Home"],
            "label": ["other string"]
        }
    }
}

如果您想要相反的行为,那么您可以使用$elemMatch查询运算符。

这些都不是特定于聚合框架的,因此如果您不需要任何其他聚合框架功能,则可以使用常规查找操作。