Агрегированный запрос Mongodb с условием

#python #mongodb #mongodb-query #aggregate-functions

#python #mongodb #mongodb-запрос #агрегированные функции

Вопрос:

Я должен выполнить агрегирование в mongodb на python и не могу этого сделать.

Ниже приведена структура извлеченного документа mongodb:

 {'Category': 'Male',
 'details' :[{'name':'Sachin','height': 6},
             {'name':'Rohit','height': 5.6},
             {'name':'Virat','height': 5}
            ]
}
  

Я хочу вернуть высоту, где имя определяется агрегатной функцией. По сути, моя идея состоит в том, чтобы извлекать данные с помощью условия применения $ match и агрегировать одновременно с помощью агрегатной функции. Это можно легко сделать, выполнив 3 шага с помощью операторов if, но я собираюсь выполнить 1 агрегатную функцию.

Пожалуйста, обратите внимание: не существует фиксированной длины значения «детали».

Дайте мне знать, если потребуется еще какое-либо объяснение.

Ответ №1:

Вы можете сделать $filter , чтобы достичь

 db.collection.aggregate([
  {
    $project: {
      details: {
        $filter: {
          input: "$details",
          cond: {
            $eq: [
              "$$this.name",
              "Sachin"
            ]
          }
        }
      }
    }
  }
])
  

Рабочая игровая площадка Mongo

Если вы используете in find , но вам нужно знать о позиционном операторе

 db.collection.find({
  "details.name": "Sachin"
},
{
  "details.$": 1
})
  

Рабочая игровая площадка Mongo

Если вам нужно сделать это как объект, вы можете просто использовать $arrayElemAr с $ifNull