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

Bra*_*ley 6 mongodb aggregation-framework

我的总 $group 是:

{
    $group: {
        _id: { ["$dayOfYear"]: "$TagDateCreated" },
        disqualified: {
            $addToSet: {
                $cond: {
                    if: { $in: [ "$TagId", [109,220,115,113,238] ]},
                    then: "$ContactId",
                    else: null
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这给了我一组唯一的 contactId 作为取消资格,但我需要删除空值。我试过在 $project 中省略 $cond 和各种 $filters 中的 else 语句,它们要么不删除任何内容,要么删除所有内容,要么出错。

mic*_*ckl 9

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

{
    $addFields: {
        disqualified: {
            $filter: {
                input: "$disqualified",
                as: "d",
                cond: {
                    $ne: [ "$$d", null ]
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

$addFields将覆盖现有数组并使用$filter可以删除null