我有以下结构的集合
{
_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]
}
答案 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可以完全按照您的意愿行事。