Подсчитайте разные значения для определенного идентификатора в MongoDB - PullRequest
1 голос
/ 19 марта 2019

Я изучаю агрегацию MongoDB для нашего анализа данных.Пример набора данных выглядит следующим образом:

{ "_id" : ObjectId("5c8fa906cd5591004c2db5f9"), "id" : 49893861, "cate_id" : "81614" }
{ "_id" : ObjectId("5c8fa906cd5591004c2db602"), "id" : 49893861, "cate_id" : "1102" }
{ "_id" : ObjectId("5c8fa906cd5591004c2db606"), "id" : 49893861, "cate_id" : "1102" }

Желаемый результат должен быть:

{
  "id": 49893861,
  "categories": [
    {
      "cate_id": "1102",
      "count": 2
    },
    {
      "cate_id": "81614",
      "count": 1
    },
  ]
}

Мне интересно, как этого добиться, используя правильную команду структуры агрегации MongoDB.Спасибо!

1 Ответ

0 голосов
/ 19 марта 2019

Вы должны использовать две $group стадии здесь.Сначала с id и cate_id и count количеством документов и , затем с id

db.collection.aggregate([
  { "$group": {
    "_id": {
      "id": { "$toLong": "$id" },
      "cate_id": "$cate_id"
    },
    "count": { "$sum": 1 }
  }},
  { "$group": {
    "_id": "$_id.id",
    "categories": {
      "$push": {
        "cate_id": "$_id.cate_id",
        "count": "$count"
      }
    }
  }}
])
...