查找数组中所有匹配元素的计数

时间:2017-01-14 06:59:46

标签: mongodb aggregation-framework

如果嵌套数组不包含值,我需要找到所有匹配数组元素的计数,count = 0。     这是我的数据实体结构。

CustomData

如果用户搜索{ name:A, issues:[1,2,3,4] } { name:B, issues:[1,2] } { name:C, issues:[3,4] } ,我希望我的结果集看起来像

issues:[1,2]

我使用下面的查询来实现这一点,但它只返回结果

[{
  name:A,
  count:2
}
{
  name:B,
  count:2
}
{
  name:C,
  count:0
}]

我肯定知道因为我正在做的$匹配

[{
  name:A,
  count:2
}
{
  name:B,
  count:2
}]

1 个答案:

答案 0 :(得分:1)

鉴于issues变量是用户输入的数组,您不需要像上面那样使用三阶段聚合来获得结果。您只需要找到每个文档的用户输入和issues字段的交集,然后获取结果数组的长度。这段代码将完成这项工作:

db.col.aggregate([{
  $project: {
    count: {
      $size: {
        $setIntersection: [issues, "$issues"]
      }
    }
  }
}])