如何在Mongo聚合查询中从组值中过滤掉空数组元素?

7

我的聚合 $group 是:

{
    $group: {
        _id: { ["$dayOfYear"]: "$TagDateCreated" },
        disqualified: {
            $addToSet: {
                $cond: {
                    if: { $in: [ "$TagId", [109,220,115,113,238] ]},
                    then: "$ContactId",
                    else: null
                }
            }
        }
    }
}

这使我得到了一组独特的联系人ID作为被取消资格的,但我需要去除空值。我曾尝试在$cond语句中省略else语句以及在$project中使用各种$filters,但要么什么都没有去除,要么就是全部移除或出现错误。


把查询条件 { $in: [ "$TagId", [109,220,115,113,238] ]} 移到 $group 之前的 $match 阶段,并在组阶段使用 push,这样做有意义吗? - s7vr
不,这个查询中还有其他项目,这会使这件事情变得不可能 - 为了简单起见,我将它们从问题中省略了。不过还是谢谢你! - Bradley
1个回答

12

$group之后,您可以添加下一个管道阶段:

{
    $addFields: {
        disqualified: {
            $filter: {
                input: "$disqualified",
                as: "d",
                cond: {
                    $ne: [ "$$d", null ]
                }
            }
        }
    }
}

$addFields将覆盖现有数组,使用$filter可以移除null值。


完美!谢谢。 - Bradley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接