группировать по условному наличию 2 значений для поля

#mongodb #aggregation-framework

#mongodb #агрегация-фреймворк

Вопрос:

Учитывая документ, подобный этому :

 {

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

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

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

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

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

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

            }
         }
      }
])
 

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

Комментарии:

1. Не могли бы вы показать образцы документов и ожидаемые результаты ?

2. если у меня есть эти 2 документа: { «идентификатор»: «1234», «год»: 2018, «дни»: 30 } и { «идентификатор»: «1234», «год»: 2019, «дни»: 20 } Сумма должна быть 30 из-за предыдущего года. Если бы у меня был только 2018 год, сумма должна быть 30, а если бы у меня был только 2019 год, сумма должна быть 20

Ответ №1:

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

 db.col.aggregate([
    {  
       "$match":{  
          "identifier":{  
             "$in":[  
                "1234",
             ]
          }
       }
    },
    {
        $group: {
            _id: "$year",
            days: { $sum: "$days" }
        }
    },
    {
        $sort: {
            _id: 1
        }
    },
    {
        $limit: 1
    }
])