在MongoDB文档中查找匹配值的数量计数

时间:2019-07-18 12:38:37

标签: mongodb mongodb-query

在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和聚合函数来查找计数,它会找到其中具有相似值的文档,但是计算匹配计数是一个问题。

1 个答案:

答案 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将提供匹配的颜色数。