【问题标题】:Mongodb 3.4.7 aggregation distinct count of one field after groupingMongodb 3.4.7 分组后一个字段的聚合不同计数
【发布时间】:2018-07-03 13:05:43
【问题描述】:

我有

{
"statement": {
   “activity”: {
    "definition": {
             “name”: “ACT_NAME1”
    }
    },
"actor": {
       "name": "User 2”
    }
},
"statement": {
   “activity”: {
    "definition": {
             “name”: “ACT_NAME2”
    }
    },
"actor": {
       "name": "User 1"
    }
},
"statement": {
   “activity”: {
    "definition": {
             “name”: “ACT_NAME2”
    }
    },
"actor": {
       "name": "User 1"
    }
},
"statement": {
   “activity”: {
    "definition": {
             “name”: “ACT_NAME1”
    }
    },
"actor": {
       "name": "User 1"
    }
 }
}

我想按 statement.activity.definition.name 分组,并在每个组中计算 actor.name 的不同计数。如何做到这一点?

{ activity: ACT_NAME1
  unique_actor_count: 2 }

{ activity: ACT_NAME2
 unique_actor_count: 1 }

我也有一些匹配条件,这里没有提供。

【问题讨论】:

标签: mongodb aggregation-framework


【解决方案1】:

使用$addToSet 将分组项累积到一个Set(唯一元素)中

document.collection.aggregate([
    {$match: {}},
    {$group: 
         {
            _id: '$statement.activity.definition.name',
            actors: {$addToSet: '$statement.actor.name'}
         }
     },
     {$project: {
         _id: '$_id',
         actors: '$actors',
         uniqueActorsCount: {$size: '$actors'}
     }}
])

【讨论】:

  • 非常感谢!它有效,你救了我。有没有办法添加像这样的 t 输出的键? { "activity_statements_users_count": [{}, {}, {} ] }
  • 什么意思?{}代表什么?
  • 哦,对不起,这是我们的输出。说:{ "_id": "Save or close the hotel – what would you suggest?", "users": [ "Rohit. LMS Test" ], "name": "Save or close the hotel – what would you suggest?", "statements_count": 1, "unique_users_count": 1 }
  • 现在我是这样的:[{}, {}, {}]。我可以将它包装在哈希键上吗? { activity_statements_users_count: {[{}, {}, {} ]} }
  • 我们可以使用上面项目的组条件吗?我在某处读到该组排在最后。
猜你喜欢
  • 2014-02-27
  • 1970-01-01
  • 2019-06-14
  • 2013-09-01
  • 2018-08-17
  • 2016-08-16
  • 2019-04-10
  • 1970-01-01
  • 2015-05-15
相关资源
最近更新 更多