#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