【问题标题】:Get unique elements of embedded many relation MongoDB获取嵌入式多关系MongoDB的独特元素
【发布时间】:2022-11-04 23:20:55
【问题描述】:

考虑收集以下文件:

[
  {
     "_id": "3981396a-9fcb-4c24-976f-d500f20c4fab",
     "entries": [
        {
           "key": "var1"
           "value": "value1"
        },
        {
           "key": "var1"
           "value": "value11"
        }
        {
           "key": "var2"
           "value": "value2"
        }
     ]
  }
]

为集合中的每个文档删除重复条目的适当方法是什么。查询至少应该找到所有具有重复条目的文档,然后手动循环是可以接受的。如果这一切都可以在单个聚合管道中完成,那就更好了。

预期结果如下:

[
  {
     "_id": "3981396a-9fcb-4c24-976f-d500f20c4fab",
     "entries": [
        {
           "key": "var1"
           "value": "value1"
        },
        {
           "key": "var2"
           "value": "value2"
        }
     ]
  }
]

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    您可以使用$reduce 将条件插入到占位符数组中。如果键不在其中,则附加当前元素。最后用占位符数组替换entries 数组。

    db.collection.update({},
    [
      {
        $set: {
          entries: {
            "$reduce": {
              "input": "$entries",
              "initialValue": [],
              "in": {
                "$cond": {
                  "if": {
                    "$in": [
                      "$$this.key",
                      "$$value.key"
                    ]
                  },
                  "then": "$$value",
                  "else": {
                    "$concatArrays": [
                      "$$value",
                      [
                        "$$this"
                      ]
                    ]
                  }
                }
              }
            }
          }
        }
      }
    ],
    {
      multi: true
    })
    

    Mongo Playground

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-27
      • 1970-01-01
      • 2018-08-03
      • 2014-10-11
      • 1970-01-01
      • 1970-01-01
      • 2015-03-13
      • 1970-01-01
      相关资源
      最近更新 更多