Мне нужна помощь, чтобы создать конвейер агрегации в mongodb.
Используемая мной версия mongodb - 4.
Документы, хранящиеся в базе данных, выглядят так:
[{
_id : "xxxxxx",
names : [
{ "lang" : "EN", value : "foo" },
{ "lang" : "IT", value : "bar" },
{ "lang" : "NOLANG", value : "baz" }
],
some : "value"
},{
_id : "yyyyyy",
names : [
{ "lang" : "FR", value : "quux" },
{ "lang" : "IT", value : "quuux" },
{ "lang" : "NOLANG", value : "quuuux" }
],
some : "value"
}]
Мне нужно добавить поле с агрегацией, которое содержит значение определенного языка (для этого примера я возьму «EN»), если не найден элемент с запрошенным языком, мне нужно получить значение объекта «NOLANG» .
Итак, результат агрегирования должен выглядеть так:
[{
_id : "xxxxxx",
name : "foo",
some : "value"
},{
_id : "yyyyyy",
name : "quuuux",
some : "value"
}]
Это конвейер, который я написал:
[
{
$project : {
names : 0,
name: {
$filter: {
input: '$names',
as: 'name',
cond: {
$switch: {
$branches: [
{
case : {
$eq : ["$$name.lang", "EN"]
},
then : "$$name.value"
} ,{
case : {
$eq : ["$$name.lang", "NOLANG"]
},
then : "$$name.value"
}
],
default : ''
}
}
}
}
}
}
]
Это дает мне ошибку: ожидаемый "[" или AggregationStage, но "{" найден.
Что я делаю не так? Кто-нибудь может мне помочь, пожалуйста?
Спасибо