我正在尝试从数组中删除null元素,在项目中,尝试使用$ reduce
输入:[“foo”,“bar”,null]
输出:[“foo”,“bar”]
$project: {
"newArray": {
$reduce: {
input: "$arrayInput",
initialValue: [],
in: {
$concatArrays: [
"$$value",
{
$cond: {
if: { $eq: [ "$$this", null ] },
then: [],
else: ["$$this"]
}
},
]
}
}
}
}
这可以使用$ filter实现
$project: {
newArray: {
$filter: {
input: "$arrayInput",
as: "a",
cond: {$ne:["$$a",null]}
}
}
}
解决方案1:
我们必须将$$转换为数组([$$ 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"]
}
},
]
}
}
}
}