【问题标题】:How could I bulk update mongoDB with a array with different value如何使用具有不同值的数组批量更新 mongoDB
【发布时间】:2015-08-08 04:16:24
【问题描述】:

如何使用数组批量更新 mongoDB。

我需要一次更新大约几十万个文档。

我可以用 mongoid 批量更新吗?

我尝试了以下方法,

但它没有用。

我收到了这个错误NoMethodError: undefined methodupdate' #`

示例代码

tickets = [100,000 items]

updated_flights = []
tickets.each do |tik|
  @flight = Flight.find_or_create_by(id: id, from: tik.from, to: tik.to)
  @flight = DO_SOMETHING
  updated_flights << @flight
end
Flight.collection.update(updated_flights)

每个文档都有不同的值需要更新

通知

我想通过Flight.find_or_create_by ...获取记录,

改变它的值,然后压入数组。

最后一次更新对象数组。

【问题讨论】:

  • 这确实有点模糊。您要更新什么样的信息?要更新的信息从哪里来?它是您正在处理的列表还是静态值?您说不想查找或创建文档。那么 id 值来自哪里?是否也在该列表或其他列表中。如果你希望得到你想要的正确答案,你需要清楚地解释你想要做什么。

标签: mongodb mongoid


【解决方案1】:

您可以在更新查询语句中使用 multi 关键字来更新多个文档。

示例:特定航班的起飞时间已更改。因此,您也想在门票中进行更改。你可以这样使用:

tickets.update( { "id" : "flight_id_to_be_update" }, { "$set" : { "departureTime" : "16:00" } }, { "multi" : true } });

【讨论】:

  • 我不明白你的建议。也就是说,我有一个要更新到 DB 中的对象数组,[ARRAY of object]。如何将其转换为您的解决方案。因为您似乎只显示了一个文档而不是多个文档
  • 我想你在谈论这个Band.where(name: "Photek").update_all(label: "Mute"),但我不会那样做。因为每个文档都有不同的值需要设置
  • 是的,你是对的。我告诉过你多个具有相同类型值的文档更新
  • 对不起~~我让你误解了我的意思:)
猜你喜欢
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 2012-02-12
  • 1970-01-01
  • 1970-01-01
  • 2014-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多