使用 Mongoid 批量插入/更新?

Posted

技术标签:

【中文标题】使用 Mongoid 批量插入/更新?【英文标题】:Batch insert/update using Mongoid? 【发布时间】:2011-04-15 21:38:56 【问题描述】:

我用谷歌搜索了所有其他人,但没有找到答案。问题是:

您好,如何使用 Mongoid 批量插入 MongoDB?

【问题讨论】:

【参考方案1】:

您可以使用 ruby​​ mongo 驱动程序的 insert 方法插入一批哈希数组。在任何 Mongoid 类中,您都可以调用 collection 来访问它。

batch = [:name => "mongodb", :name => "mongoid"]  
Article.collection.insert(batch)

【讨论】:

要记住的重要一点是,通过这样做,您绕过了 mongoid.yml 选项。因此,如果您使用它,请务必在需要时通知他们,例如:Article.with(safe: true).collection.insert(batch) 我收到 NoMethodError: undefined method `insert' 我也是。问了一个关于它的问题***.com/questions/33894132/… 对于undefined method 'insert',使用create尝试下面的答案 @HarisKrajina - 在 mongoid 的更新版本中,您将需要使用 'insert_many' 方法。希望这会有所帮助,【参考方案2】:

如果您想批量插入 Mongoid 文档(模型)而不是哈希,请在将其放入数组之前调用模型的 as_document 方法:

@page_views << page_view.as_document

...

PageView.collection.insert(@page_views)

【讨论】:

我得到这个错误 undefined method `as_document' for #<0x10a40f870> &amp; 【参考方案3】:

Mongoid 的Model.create 方法可以接受一个数组来创建文档。

来自 Mongoid 文档:

Person.create([
   first_name: "Heinrich", last_name: "Heine" ,
   first_name: "Willy", last_name: "Brandt" 
])

https://docs.mongodb.org/ecosystem/tutorial/mongoid-persistence/

【讨论】:

那仍然会一一创建它们:(【参考方案4】:

你可以用这个:

books = [:name => "Harry Potter", :name => "Night"]  
Book.collection.insert_many(books)

我发现“插入”对我不起作用(Monogoid 5.1.3):

NoMethodError: undefined method `insert' for # <Mongo::Collection:0x007fbdbc9b1cd0>
Did you mean?  insert_one
               insert_many
               inspect

这是来自“lib/mongo/collection.rb”的源代码:

# Insert the provided documents into the collection.
#
# @example Insert documents into the collection.
#   collection.insert_many([ name: 'test' ])
#
# @param [ Array<Hash> ] documents The documents to insert.
# @param [ Hash ] options The insert options.
#
# @return [ Result ] The database response wrapper.
#
# @since 2.0.0
def insert_many(documents, options = )
  inserts = documents.map |doc|  :insert_one => doc 
  bulk_write(inserts, options)
end

【讨论】:

当我们使用 document.collection.insert_many 时,它会跳过 after_save 回调。如何解决这个问题。

以上是关于使用 Mongoid 批量插入/更新?的主要内容,如果未能解决你的问题,请参考以下文章

为啥批量插入/更新更快?批量更新如何工作?

使用 Petapoco 批量插入/更新

Java批量插入更新操作

mybatis+mysql批量插入和批量更新

Slick 3.0 批量插入或更新(更新插入)

Java--MyBatis批量插入批量更新和批量删除