Mongo DB - 如果某一特定字段有多个文档匹配,则更新文档字段

问题描述 投票:0回答:1

场景

Mongo DB 文档示例 文件1 { _id 123 客户:客户A 州: 德克萨斯州 城市: 休斯顿 校验和:1111 是否捆绑: }

文档2 { _id 1234 客户:客户B 州: 德克萨斯州 城市: 休斯顿 校验和:1111 是否捆绑: }

文档3 { _id 12345 客户:客户c 州: 纽约州 城市: 布法罗 校验和:2222 是否捆绑:

}

校验和字段使用“州”和“城市”字段填充在应用程序代码中。

问题

如果校验和匹配超过 1 个文档,则将每个文档的 IsBundled 字段填充为 true。在我们的例子中,第一个和第二个文档需要使用 isBundled: true 进行更新。我不是在应用程序代码中添加此逻辑,而是使用聚合管道寻找更好的解决方案

mongodb aggregation-framework spring-data
1个回答
0
投票

也许是这样的:

db.collection.aggregate([
{
"$group": {
  "_id": "$checksum",
   "toUpdate": {
    "$addToSet": "$_id"
   },
  cnt: {
    $sum: 1
    }
  }
  },
  {
   $match: {
    cnt: {
      $gt: 1
   }
  }
 },
 {
  $unwind: "$toUpdate"
 }
 ]).toArray().forEach(function(d){ db.collection.update({_id:d.toUpdate},{$set:{ IsBundled:"true" }})   })

聚合游乐场

解释:

  1. 对校验和进行分组并根据相同的校验和获取文档_id
  2. 过滤匹配多个文档的校验和
  3. 使用需要更新的 _id 展开 toUpdate 数组
  4. 循环结果以使用 IsBundled: true 更新所有文档
© www.soinside.com 2019 - 2024. All rights reserved.