Я использую MongoDB 4.2, и я ищу способ удалить все элементы из подмассива, если он не соответствует определенному условию, используя этап агрегации, совместимый с потоками изменений . совместимые этапы :
- $ addFields
- $ match
- $ project
- $ replace Root
- $ replaceWith
- $ redact
- $ set
- $ unset
Например, предположим, что у нас есть коллекция, пользователи , содержащий документы в этом формате:
{ "name" : "John Doe",
"access": [
{ "level" : "Gold", "rating" : 3.2 },
{ "level" : "Silver", "rating" : 2.1 },
{ "level" : "Gold", "rating" : 4.2 }
]
}
Я хотел бы использовать одну или комбинацию совместимых этапов агрегации для удаления элементов в массиве "доступа", которые не соответствуют фильтру, например как { $elemMatch : { "level" : "Gold" } }
. Я бы хотел, чтобы итоговый документ выглядел так:
{ "name" : "John Doe",
"access": [
{ "level" : "Gold", "rating" : 3.2 },
{ "level" : "Gold", "rating" : 4.2 }
]
}
Можно ли это сделать в MongoDB?