сгруппировать по условному наличию 2 значений для поля - PullRequest
1 голос
/ 17 апреля 2019

При наличии такого документа:

{

    "identifier" : "1234",
    "year" : 2018,
    "days" : 30
}

Где год может иметь только 2 значения: предыдущий год и текущий год.

Когда в базе данных присутствуют как предыдущий, так и текущий год, мне нужновключить только предыдущий год в мой групповой этап.

Вот мой текущий запрос:

db.getCollection('test').aggregate([
      {  
         "$match":{  
            "identifier":{  
               "$in":[  
                  "1234",
               ]
            },

         }
      },
      {  
         "$group":{  
            "_id":null,
            "days":{  
              "$sum":"$days"

            }
         }
      }
])

Возможно ли это?Спасибо

1 Ответ

1 голос
/ 17 апреля 2019

Вы можете $ group на year, а затем взять самый старый ( $ sort + $ limit )

db.col.aggregate([
    {  
       "$match":{  
          "identifier":{  
             "$in":[  
                "1234",
             ]
          }
       }
    },
    {
        $group: {
            _id: "$year",
            days: { $sum: "$days" }
        }
    },
    {
        $sort: {
            _id: 1
        }
    },
    {
        $limit: 1
    }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...