代码之家  ›  专栏  ›  技术社区  ›  Bradley

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

  •  0
  • Bradley  · 技术社区  · 7 年前

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

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

    1 回复  |  直到 7 年前
        1
  •  7
  •   mickl    7 年前

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

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

    $addFields 将覆盖现有数组并使用 $filter null

    推荐文章