MongoDB使用外部数据批量更新

移民

我有以下收藏

[
{"_id":1,"data" :[{"a":1},{"b":2},{"c":3}] },
{"_id":2,"data" :[{"a":1},{"b":2}]  },
{"_id":3,"data":[{"c":3},1,2,3]},
{"_id":4,"data":[{"b":1},{"d":2},{"c":3}]},
{"_id":5,"data":[{"c":2},{"a":3}]},
{"_id":6,"data":[0,2,3]},
{"_id":7,"data":[{"b":4},{"c":3}]}
]

我还具有以下更新集,我想用来更新集合中的数据数组

[
{"id":1,"old":{"c":3}, "new":{"v":2}},
{"id":4, "old":{"b":1},"new":{"v":3}},
{"id":5, "old":{"a":3},"new":{"v":3}},
{"id":7, "old":{"c":2},"new":{"v":3}}
]

对于这些数据点中的每一个,如果在文档的数据数组中找到“ _id” =“ id”的旧数据,我想将其替换为新值。输出应如下所示:

[
{"_id":1,"data" :[{"a":1},{"b":2},{"v":2}] },
{"_id":2,"data" :[{"a":1},{"b":2}]  },
{"_id":3,"data":[{"c":3},1,2,3]},
{"_id":4,"data":[{"v":3},{"d":2},{"c":3}]},
{"_id":5,"data":[{"c":2},{"v":3}]},
{"_id":6,"data":[0,2,3]},
{"_id":7,"data":[{"b":4},{"c":3}]}
]

到目前为止,我的解决方案是遍历更新集并为每个数据点执行以下更新查询:

myCollection.update({"_id":id,"data":old},{"$set":{"data.$":new}})

有没有办法一次执行所有更新?

棒球技术

我有从csv类似的导入方法。我进行查找并遍历数据以比较并构建更新数组。然后将其输入到bulkWrite()方法中。

https://docs.mongodb.com/manual/core/bulk-write-operations/

编辑-

因为您要根据自己的标准进行操作,所以您必须在bulkwrite中执行许多updateOne()。因此,它将类似于以下内容。

我习惯于javascript,所以示例在其中而不是在shell中。但是您应该知道如何构建对象。

let mongoUpdates = []
let newStuff = [
{"id":1,"old":{"c":3}, "new":{"v":2}},
{"id":4, "old":{"b":1},"new":{"v":3}},
{"id":5, "old":{"a":3},"new":{"v":3}},
{"id":7, "old":{"c":2},"new":{"v":3}}
]

mongoUpdates = newStuff.map(item => {
  return {
    updateOne: {
      "filter": {
        _id: item.id,
        date: item.old
      },
      "update": { $set: { "data.$" : item.new } }
    }
  }
})

collection.bulkWrite(mongoUpdates)

所以我正在使用:

https://docs.mongodb.com/manual/reference/method/db.collection.updateOne/对于每个要适当查找和设置更新的项目

然后https://docs.mongodb.com/manual/reference/operator/update/positional/#up。S查找数组中“旧”的位置,然后将“新”放置在数组上

然后调用数组中的批量对象,该批量对象包含的每个项目都包含一个updateOne。

该代码未经测试,但可以使您更加接近所需的位置。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在mongodb中批量更新数据

来自分类Dev

使用R批量插入/更新到mongoDB

来自分类Dev

使用forEach的MongoDB批量更新效率

来自分类Dev

使用mongodb在Rails中进行批量更新

来自分类Dev

MongoDB批量更新缓慢

来自分类Dev

PyMongo:如何在MongoDB中批量更新巨大的JSON数据

来自分类Dev

MongoDB批量API:找出匹配的批量更新

来自分类Dev

如何使用Java在MongoDB中执行文档的批量更新?

来自分类Dev

使用Laravel Tinker和Carbon批量更新数据

来自分类Dev

使用字典中的值批量更新数据库

来自分类Dev

使用LINQ批量更新

来自分类Dev

使用CGridView批量更新

来自分类Dev

批量更新数据库

来自分类Dev

更新批量数据冻结屏幕

来自分类Dev

使用SQL加密更新生产数据库-批量更新快捷方式?

来自分类Dev

使用“用于更新”批量收集

来自分类Dev

使用python批量更新MySql

来自分类Dev

MongoDB更新操作是否支持批量提交?

来自分类Dev

如何使用Java更新MongoDb中的数据?

来自分类Dev

如何使用nodejs更新mongodb中的数据

来自分类Dev

如何在mongodb中批量获取数据

来自分类Dev

批量更新多个PDF元数据

来自分类Dev

在iOS 7 CoreData中批量更新数据

来自分类Dev

批量更新大型sqlite数据库

来自分类Dev

批量更新表中的数据-最佳方法?

来自分类Dev

spring数据是否使用新的MongoDB Bulk API进行批量操作?

来自分类Dev

Ruby on Rails-使用select更新表中的多个数据(批量编辑)

来自分类Dev

使用外部MongoDB并通过Meteor.js获取数据

来自分类Dev

使用mongoose在MongoDB中批量上传