Я ищу запрос для этапа $match
в моей агрегации, который почти совпадает с в этом вопросе , но ..
- если поле (именованное звание в моем случае) не существует в документе, добавить документ к результатам
- , но если поле существует, применить условие
$operator
(в моем случае это $max
) в это поле и добавьте в результаты все документы, соответствующие этому условию.
MongoPlayground с примером коллекции .
Результат должен быть таким:
[
{
"method": 3,
"item": 1,
"rank": 3 //because it has field named rank, and suits condition {rank: $max}
},
{
"method": 4,
"item": 1 //we need this, because document doesn't have rank field at all
},
{
"method": 5,
"item": 1 //we need this, because document doesn't have rank field at all
}
]
Вещи, которые я уже пробовал:
{
$match: {
$or: [
{item: id, rank: {$exists: true, $max: "$rank"}}, //id === 1
{item: id, rank: {$exists: false}} //id === 1
]
}
}
UPD: На данный момент, вероятно, я не ограничиваю с $match
только этапом, $project
также имеет значение после совпадения по умолчанию, поэтому я могу запросить каждый документ на этапе $match
на id
независимо от того, есть поле do c rank
или нет, а затем На $project
этапе делайте «разделение» по рангу $exists