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

MongoDB聚合按字段分组,将多个案例合并为同一组

  •  0
  • fgalan  · 技术社区  · 8 年前

    我试图用MongoDB聚合框架解决以下情况。我的文档 entities 收藏hasve

    • 一 _id.type 字段可以是 "" null 或非空字符串,以及
    • 一 attr 是字符串的字段。

    _id类型 但其中的元素 "" 无效的 必须属于同一组。我正在尝试聚合管道中的这个阶段:

    {
        "$group": {
            "_id": {"$cond": [{"$in": ["$_id.type", [null, ""]]}, "", "$_id.type"]},
            "attrNames": {
                "$addToSet": "$attrName"
            }
        }
    },
    

    我的理解是 _id

    • 如果 _id类型 无效的 $cond 数组的使用使得键 "" (所以把这两个特殊的案例放在同一组中)
    • 在任何其他情况下,它们是 $条件 _id类型

    但是,我收到以下错误消息:

    所以我想我在做坏事。

    我应该如何修改我的聚合语句(或使用一个新的)来解决这个问题?

    1 回复  |  直到 8 年前
        1
  •  0
  •   fgalan    8 年前

    正如评论中所建议的(谢谢!)碰巧我用错了聚合语法。使用以下语句有效:

    > db.entities.aggregate({
        "$group": {
            "_id": {"$cond": [{"$in": ["$_id.type", [null, ""]]}, "", "$_id.type"]},
            "attrNames": {
                "$addToSet": "$attrName"
            }
        }
    })