Значения совокупного количества в MongoDb - PullRequest
0 голосов
/ 20 января 2020

Пожалуйста, мне нужна помощь для агрегирования подсчета статуса (2 и 3) за год в вложенном документе MongoDb.

Мой Json:

[
   {
      "_id":1,
      "name":"aaa",
      "calendars":[
         {
            "year":2012,
            "status":2
         },
         {
            "year":2013,
            "status":1
         },
         {
            "year":2014,
            "status":3
         }
      ]
   },
   {
      "_id":2,
      "name":"bbb",
      "calendars":[
         {
            "year":2012,
            "status":1
         },
         {
            "year":2013,
            "status":1
         },
         {
            "year":2014,
            "status":2
         }
      ]
   }
]

Это мой Код mongodb:

db.mycol.aggregate([{"$match": {"calendars.status": {"$in": [2, 3]}}}, {"$unwind": "$calendars"},
                    {"$group": {_id: {"year": "$calendars.year"},
                                total: {"$sum": 1}
                                }},
                    {"$project": {
                        "year": "$_id.year",
                        "total": "$total", "_id": 0}},
                    ])

И мне нужен результат:

year total  
2012 1
2013 0
2014 2

Спасибо

1 Ответ

2 голосов
/ 20 января 2020

Сначала я раскручиваю объект массива и соответственно сопоставляю,

 db.test.aggregate([
  {
    "$unwind": "$calendars"
  },
  {
    "$match": {
      "calendars.status": {
        "$in": [
          2,
          3
        ]
      }
    }
  },
  {
    "$group": {
      _id: {
        "year": "$calendars.year"
      },
      total: {
        "$sum": 1
      }
    }
  },
  {
    "$project": {
      "year": "$_id.year",
      "total": "$total",
      "_id": 0
    }
  },

])
...