在MongoDB中,我想查找条件中指定的其中值很少或全部的文档,并查找匹配的值个数。
我的sudo目标文档:
{ "name":"room1",
"colors":["red","blue","green"],
"objects":["chair","bed"]
}
现在,我希望文档具有“ room1”中存在的任何颜色和对象。即使找到一种或所有颜色的对象,也应给出结果。
{ "name":"room2",
"colors":["blue","green"],
"objects":["chair","bed","sofa","fridge"]
}
{ "name":"room3",
"colors":["yellow","pink"],
"objects":["chair"]
}
因此结果应为: 对于room2:matchcount = 4,因为它与room1共享4个共同值 对于room3:matchcount = 1,因为它与room1共享1个共同值
到目前为止,我已经尝试使用$ in和聚合函数来查找计数,它会找到其中具有相似值的文档,但是计算匹配计数是一个问题。
答案 0 :(得分:0)
假设您的收藏名称为“房间”,则查询将为:
db.room.aggregate([{
$match: { colors: { $in: ["red","blue","green"] } }
}, {$project:{matchedColorCount:{
$size: {
"$setIntersection": [["red","blue","green"], '$colors' ]
}
}}}])
在这里,$match: { colors: { $in: ["red","blue","green"] }
会告诉您需要在文档中找到哪些颜色。
"$setIntersection": [["red","blue","green"], '$colors' ]
将从特定文档中提取匹配的颜色。
$size
将提供匹配的颜色数。