#mongodb #aggregation-framework
#mongodb #структура агрегации
Вопрос:
Сейчас я использую что-то похожее на приведенное ниже, и оно работает и захватывает то, что мне нужно:
state: {
$filter: {
input: "$location.address_components",
as: "address_comp",
cond: { $in: ["administrative_area_level_1", "$address_comp.types"]}
}
},
В моем случае использования это не всегда гарантировано. В этом случае я делаю то же самое для country
и postal
с различными проверками равенства для условия. Однако у меня осталось state
поле в моем возвращенном документе, представляющее собой массив максимального размера 1 с объектом внутри.
В идеале я хотел бы, чтобы это поле было просто самим объектом, а не массивом с указанным объектом, возвращаемым filter
оператором.
Ответ №1:
Трудно догадаться, как выглядит весь ваш конвейер агрегации, но я предполагаю, что ваш заключительный этап дает что-то вроде:
[
{
"_id": ObjectId("5a934e000102030405000000"),
"key1": "value1",
"state": [
{
"somekey": "dssdd"
}
]
}
]
В этом случае вам просто понадобится $unwind
state
путь. Итак, опять же, я предполагаю, что ваш последний этап — это $project
:
{
"$project": {
...
...
state: {
$filter: {
input: "$location.address_components",
as: "address_comp",
cond: { $in: ["administrative_area_level_1", "$address_comp.types"]}
}
}
}
},
{
"$unwind": "$state"
}
Результатом будет:
[
{
"_id": ObjectId("5a934e000102030405000000"),
"key": 1,
"state": {
"somekey": "dssdd"
}
}
]