在mongoDB中合并两个数组字段

Sar*_*air 2 mongodb mongodb-query aggregation-framework

我有以下结构的集合

{
   _id : ObjectId("52f0795a58c5061aa34d436a"),
   "attribute1" : [1, 3, 6, 7],
   "attribute2" : [2, 4, 6, 8]
}
Run Code Online (Sandbox Code Playgroud)

有没有什么办法可以合并这两个属性,同时使用mongoDB中的聚合查询删除重复项?我需要结果是这样的:

{
   _id : ObjectId("52f0795a58c5061aa34d436a"),
   "attribute3" : [1, 3, 6, 7, 2, 4, 8]
}
Run Code Online (Sandbox Code Playgroud)

sty*_*ane 6

使用.aggregate()方法和$setUnion操作员.

db.collection.aggregate([
    { "$project": { 
        "attribute3": { "$setUnion": [ "$attribute1", "$attribute2" ] } 
    }}
])
Run Code Online (Sandbox Code Playgroud)

产量:

{
    "_id" : ObjectId("52f0795a58c5061aa34d436a"),
    "attribute3" : [8, 4, 2, 6, 3, 7, 1]
}
Run Code Online (Sandbox Code Playgroud)


Nei*_*unn 5

如果要修改数据,一旦读取了其中一个数组的内容,就可以将$ addToSet$ each修饰符一起使用.这些将是单独更新,因为您无法在更新操作中引用文档的另一个元素.

如果您真的只想将其用于聚合并且可以等待,那么即将发布的MongoDB版本会将新的集合运算符添加到聚合中.特别是$ setUnion会完全按照你的意愿行事.