#mongodb
#mongodb
Вопрос:
У меня есть коллекция, которая выглядит примерно так:
[
{
"_id": 1,
"title": "dummy title",
"settings": [
{
"type": "light",
"status": "enabled"
},
{
"type": "flare",
"status": "disabled"
},
{
"type": "toolbar",
"status": "endbale"
}
]
}
]
Я хочу создать запрос для извлечения документа, но только с типами активных настроек в массиве, например, в приведенном выше случае результат должен быть:
[
{
"_id": 1,
"title": "dummy title",
"enabled_settings": ["light", "toolbar"]
}
]
Как я могу добиться чего-то подобного?
Ответ №1:
Вы можете использовать $reduce
в проекционной части, $cond
условие будет проверять, включен ли статус, затем объединять и в последнем возвращать vlaue,
db.collection.find({},
{
_id: 1,
title: 1,
settings: {
$reduce: {
input: "$settings",
initialValue: [],
in: {
$concatArrays: [
"$$value",
{
$cond: [
{ $eq: ["$$this.status", "enabled"] },
["$$this.type"],
[]
]
}
]
}
}
}
})