Как удалить элемент массива со значением null в проекции (проекте), mongodb - PullRequest
0 голосов
/ 05 апреля 2019

Я пытаюсь удалить нулевой элемент из массива, в projeccion, попробуйте использовать $ redu

Ввод: ["foo", "bar", null]

Вывод: ["foo", "bar"]

$project: {
    "newArray": { 
        $reduce: {
        input: "$arrayInput",
            initialValue: [],
            in: {
                $concatArrays: [
                    "$$value",
                     {
                         $cond: {
                             if: { $eq: [ "$$this", null ] },
                             then: [],
                             else: ["$$this"]
                         }
                    },
                ]
            }
        }
    }
}

Ответы [ 2 ]

1 голос
/ 05 апреля 2019

Этого можно добиться, используя $ filter

$project: {
    newArray: {
        $filter: {
            input: "$arrayInput",
            as: "a",
            cond: {$ne:["$$a",null]}
            }
        }
    }
0 голосов
/ 05 апреля 2019

Решение 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"]
                         }
                    },
                ]
            }
        }
    }
}
...