#arrays #mongodb #aggregation-framework #projection
#массивы #mongodb #aggregation-framework #проекция
Вопрос:
Я пытаюсь удалить элемент null из массива в проекте, попробуйте использовать $reduce
Ввод: [«foo», «bar», null]
Вывод: [«foo», «bar»]
$project: {
"newArray": {
$reduce: {
input: "$arrayInput",
initialValue: [],
in: {
$concatArrays: [
"$$value",
{
$cond: {
if: { $eq: [ "$$this", null ] },
then: [],
else: ["$$this"]
}
},
]
}
}
}
}
Комментарии:
1. Не могли бы вы также показать коллекции примеров и желаемый результат
Ответ №1:
Решение 1:
Мы должны преобразовать $$this в массив ([$$this]) и сравнить с [null]
$project: {
"newArray": {
$reduce: {
input: "$arrayInput",
initialValue: [],
in: {
$concatArrays: [
"$$value",
{
$cond: {
if: { $eq: [["$$this"], [null]] },
then: [],
else: ["$$this"]
}
},
]
}
}
}
}
Решение 2:
В случае, если вы хотите исключить повторяющиеся значения, мы должны использовать $setIntersection во входном значении.
Ввод: [«foo», «bar», null, «foo», «bar»]
Вывод: [«foo», «bar»]
$project: {
"newArray": {
$reduce: {
input: { "$setIntersection": "$arrayInput" },
initialValue: [],
in: {
$concatArrays: [
"$$value",
{
$cond: {
if: { $eq: [["$$this"], [null]] },
then: [],
else: ["$$this"]
}
},
]
}
}
}
}
Ответ №2:
Это может быть достигнуто с помощью $filter
$project: {
newArray: {
$filter: {
input: "$arrayInput",
as: "a",
cond: {$ne:["$$a",null]}
}
}
}