Mongo聚合-根据字段的存在对文档分组总数求和

问题描述

我有很多这种形状的文件

[
  { _id: 0,chain: 'big-name',manager: 'bobby',profile: {...} },{ _id: 1,{ _id: 2,...
]

我的目标是获取属于同一管理者但也按链分组的文档总数。因此,在上面的示例中,我希望结果看起来像:'bobby',chains: 2,non-chains: 1

在用None投影空的对象之后,我尝试按经理和链进行分组,然后我使用$sum条件对各个组进行求和,但是没有链的组未求和正确地。我的汇总看起来像这样:

[
  {
    "$project": {
      "manager": 1,"chain": {
        "$ifNull": [
          "$chain","None"
        ]
      }
    }
  },{
    "$group": {
      "_id": {
        "manager": "$manager","chain": "$chain"
      }
    }
  },{
    "$group": {
      "_id": "$_id.manager","non-chains": {
        "$sum": {
          "$cond": [
            {
              "$eq": [
                "$_id.chain","None"
              ]
            },1,0
          ]
        }
      },"chains": {
        "$sum": {
          "$cond": [
            {
              "$eq": [
                "$_id.chain",1
          ]
        }
      }
    }
  }
]

我的想法是在$cond为true时将总和加1,在$cond为false时将总和加0,但是我知道这是不正确的,因为我只得到1 { {1}}在Compass的最后一个步骤之前的聚合步骤中可以看到,至少有3个带有{​​{1}}。任何帮助,我们将不胜感激。我一直在用谷歌搜索和旋转轮子。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)