首页 > 解决方案 > 清除每个文档中对象数组内的列表字段中的重复项

问题描述

{ 
    "_id" : "1235", 
    "details" : [
        {           
            "productId" : "PRODUCT1",           
            "myList" : [
                "0001", 
                "0001", 
                "0002", 
                "0002", 
                
            ]
         },
         {           
            "productId" : "PRODUCT2",            
            "myList" : [
                "0002", 
                "0002", 
                "1234", 
                "1234", 
                
            ]
         }
    ]
}

我在每个嵌套的子文档中都有 myList 。我需要清除每个文档中 myList 中的重复项。有任何查询可以完成此操作吗?

在输出中,myList 中的值应该是一个联合。

这是预期的输出。请注意, myList 不再包含重复项。

{
  "_id" : "1235", 
  "details" : [
       {       
          "productId" : "PRODUCT1",           
          "myList" : [       
              "0001", 
              "0002", 
          ]
       },
       {  
          "productId" : "PRODUCT2",            
          "myList" : [
              "0002",      
              "1234", 
          ]
       }
  ]
}

标签: arraysdatabasemongodbmongodb-querynosql

解决方案


您需要$map来替换现有数组,并且可以使用$setUnion删除重复的条目:

db.collection.aggregate([
    {
        $addFields: {
            details: {
                $map: {
                    input: "$details",
                    in: {
                        $mergeObjects: [
                            "$$this",
                            { myList: { $setUnion: "$$this.myList" } }
                        ]
                    }
                }
            }
        }
    },
    { $out: "collection" }
])

蒙戈游乐场


推荐阅读