我正在试图找出如何搜索具有相同“标签”组合的所有文档,如下面的文档。
这意味着我想找到所有标签 {品牌:“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"
}
]
}
答案 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"
}
]
}