Mongodb 3.4.7 агрегирование различного количества одного поля после группировки - PullRequest
0 голосов
/ 02 июля 2018

у меня

{
"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 }

Также у меня есть некоторые условия для этого и здесь не указано.

1 Ответ

0 голосов
/ 02 июля 2018

Используйте $addToSet для накопления сгруппированных предметов в Набор (уникальные элементы)

document.collection.aggregate([
    {$match: {}},
    {$group: 
         {
            _id: '$statement.activity.definition.name',
            actors: {$addToSet: '$statement.actor.name'}
         }
     },
     {$project: {
         _id: '$_id',
         actors: '$actors',
         uniqueActorsCount: {$size: '$actors'}
     }}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...