mongodb查找或聚合匹配文档数组中的对象

时间:2014-07-30 19:38:02

标签: mongodb mongodb-query

我正在试图找出如何搜索具有相同“标签”组合的所有文档,如下面的文档。

这意味着我想找到所有标签 {品牌:“bosh”,类型:“冰箱”}&& {type:“freezer”,color:“white”} 或任何其他标签组合。这可能在mongo?我怎么能这样做,或者在某个地方有一个很好的解释来解释这个?

{
"_id" : ObjectId("53bd7837156aa38914f55176"),
"user_id" : "53bd1a0d237e7d44120a51d1",
"tags" : [ 
    {
        "brand" : "bosch",
        "type" : "fridge",
        "color" : "black"
    }, 
    {
        "brand" : "electrolux",
        "type" : "freezer",
        "color" : "white"
    }
]
}

1 个答案:

答案 0 :(得分:2)

您需要使用$elemMatch运算符来匹配子文档和$all运算符以组合多个$ elemMatch运算符:

db.coll.find({
    "tags" : { 
        "$all" : [
            {"$elemMatch" : {"brand": "bosch", "type" : "fridge"}}, 
            {"$elemMatch" : {"type": "freezer", "color": "white"}}
        ]
    }
});

此查询将查找具有在两个字段中具有指定值的子文档的所有文档(即品牌&&类型和类型&&颜色)。

以下文档将 NOT 与上述查询匹配(注意类型字段的值被颠倒):

{
    ...
    "tags" : [ 
        {
            "brand" : "bosch",
            "type" : "freezer"
        }, 
        {
            "brand" : "electrolux",
            "type" : "fridge"
        }
    ]
}