在mongoDB中合并两个数组字段

时间:2014-02-04 06:03:56

标签: mongodb mongodb-query aggregation-framework

我有以下结构的集合

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

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

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

2 个答案:

答案 0 :(得分:6)

使用.aggregate()方法和$setUnion运算符。

db.collection.aggregate([
    { "$project": { 
        "attribute3": { "$setUnion": [ "$attribute1", "$attribute2" ] } 
    }}
])

哪个收益率:

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

答案 1 :(得分:5)

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

如果您真的只想将其用于聚合并且可以等待,那么即将发布的MongoDB版本会向聚合添加新的set operators。特别是$setUnion可以完全按照您的意愿行事。