我有以下结构的集合
{ _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] }
styvane.. 6
使用.aggregate()
方法和$setUnion
操作员.
db.collection.aggregate([ { "$project": { "attribute3": { "$setUnion": [ "$attribute1", "$attribute2" ] } }} ])
产量:
{ "_id" : ObjectId("52f0795a58c5061aa34d436a"), "attribute3" : [8, 4, 2, 6, 3, 7, 1] }
Neil Lunn.. 5
如果要修改数据,一旦读取了其中一个数组的内容,就可以将$ addToSet与$ each修饰符一起使用.这些将是单独更新,因为您无法在更新操作中引用文档的另一个元素.
如果您真的只想将其用于聚合并且可以等待,那么即将发布的MongoDB版本会将新的集合运算符添加到聚合中.特别是$ setUnion会完全按照你的意愿行事.
如果要修改数据,一旦读取了其中一个数组的内容,就可以将$ addToSet与$ each修饰符一起使用.这些将是单独更新,因为您无法在更新操作中引用文档的另一个元素.
如果您真的只想将其用于聚合并且可以等待,那么即将发布的MongoDB版本会将新的集合运算符添加到聚合中.特别是$ setUnion会完全按照你的意愿行事.
使用.aggregate()
方法和$setUnion
操作员.
db.collection.aggregate([ { "$project": { "attribute3": { "$setUnion": [ "$attribute1", "$attribute2" ] } }} ])
产量:
{ "_id" : ObjectId("52f0795a58c5061aa34d436a"), "attribute3" : [8, 4, 2, 6, 3, 7, 1] }