【问题标题】:Merge two array field in mongoDB合并mongoDB中的两个数组字段
【发布时间】:2014-02-27 23:40:33
【问题描述】:

我有以下结构的集合

{
   _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]
}

【问题讨论】:

  • 这里有什么重复项?
  • @heinob 6 是这里的副本

标签: mongodb mongodb-query aggregation-framework


【解决方案1】:

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

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

产量:

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

【讨论】:

  • 不错。但是如果我必须加入两个对象数组。因为只用普通数组设置联合。
【解决方案2】:

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

如果你真的只是想要这个聚合并且可以等待,那么即将发布的 MongoDB 将新的set operators 添加到聚合中。尤其是$setUnion,它会做你想做的事。

【讨论】:

  • $setUnion - 这正是我要找的。谢谢(你的)信息。我真的需要使用聚合框架来做到这一点。不过我一直在等待下一个版本:(
  • 在使用聚合框架的当前版本中是否有任何解决方法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-07
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
  • 2021-06-26
相关资源
最近更新 更多