我有一个聚合管道,可在多个字段上执行$first
。
但是,在某些情况下,这些字段不存在。在这些情况下,该字段的值将返回为null
。我需要一种排除这些字段的方法。
我尝试在$ifNull
阶段使用$project
,但是它将字段的值设置为false
而不是排除它们。
小组赛阶段:
{
_id: null,
thisExists: {
$first: "$thisExists"
},
thisDoesNotExist: {
$first: "$thisDoesNotExist"
}
}
结果:
{
_id:null,
thisExists:"I exist",
thisDoesNotExist:null
}
答案 0 :(得分:0)
想通了。
在$project
阶段,$ifNull
应该返回"$false"
而不是false
{
thisExists: { $ifNull : ["$thisExists","$false"]},
thisDoesNotExist : {$ifNull : ["$thisDoesNotExist","$false"]}
}
这将删除为空的字段。
如果有人有一个更好,更轻松的答案,那就太好了。我宁愿不要在$project
中放置这么多字段,即使它是动态的。