Я хотел бы объединить последний параметр с существующим значением.
Моя структура данных:
{
_id: 1,
...(many other fields)...
settings: [
{
_id: 11,
values: [
{
likesFruit: true,
likesMeat: true,
}
]
},
{
_id: 12,
values: [
{
likesFruit: false
}
]
}
]
},
{
_id: 2,
...(many other fields)...
settings: [] // empty
}
Вопрос: Как получить этот результат
{
_id: 1,
...(many other fields)...
likesFruit: false,
likesMeat: true
},
{
_id: 2,
...(many other fields)...
}
Мне нужно решение, которое не удаляет результаты, где настройки, например, пусты / не содержат все реквизиты.Например, _id: 2
не содержит никаких настроек.Поэтому я не хочу его раскручивать и фильтровать для определенной настройки, потому что мне все еще нужен корневой объект, даже если настройки не существуют.
Я пробовал это с addFields
:
$addFields: {
likesFruit: "$settings.value.likesFruit",
likesMeat: "$settings.value.likesMeat"
}
Что оставляет меня с этим:
_id: 1,
...(many other fields)...
settings: [...],
likesFruit: [[true], [false]]
likesMeat: [[], [true]]
Который я пытался отфильтровать с помощью:
$addFields: {
likesFruit: {
$filter: {
input: "$likesMeat",
as: "items",
cond: { $ne : ["$$items", null ] }
}
}
}
Моя главная проблема - двойное вложение.Интересующее меня "settings.value" содержит только один объект.Поэтому я думаю, что переход от settings.values: [{}]
к settings.values: {}
был бы ключом к решению.Тогда я мог бы project
отдельные значения, использовать $reverseArray
и $arrayElemAt: [$array, 0]
, чтобы получить последний элемент.