I googled and all others, but I didn't find the answer. The question is:
Hi, how can I do batch insert with Mongoid to MongoDB?
I googled and all others, but I didn't find the answer. The question is:
Hi, how can I do batch insert with Mongoid to MongoDB?
You can insert a batch array of hashes using the ruby mongo driver's insert method. From any Mongoid class, you can call collection to access it.
batch = [{:name => "mongodb"}, {:name => "mongoid"}]
Article.collection.insert(batch)
undefined method 'insert'
try bellow answer using create
–
Lacework insert
has been replace with insert_many
: Article.collection.insert_many(batch)
–
Pitre create
does not do batch insert. –
Pitre If you want to batch insert Mongoid documents (models) instead of hashes, call your model's as_document method before placing it into array:
@page_views << page_view.as_document
...
PageView.collection.insert(@page_views)
as_document
doesn't work against an array, only single objects. If you already have an array of objects, you can call it like so: PageView.collection.insert(@page_views.map(&:as_document))
which will map all of the objects to documents prior to insertion. –
Barret mongoid
or mongodb
solve out the fact that an object already exists and perform an update? Or is it necessary to filter those out? –
Keefer You can use this:
books = [{:name => "Harry Potter"}, {:name => "Night"}]
Book.collection.insert_many(books)
And I find that "insert" does not work for me(Monogoid 5.1.3):
NoMethodError: undefined method `insert' for # <Mongo::Collection:0x007fbdbc9b1cd0>
Did you mean? insert_one
insert_many
inspect
This is the source code from "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
insert_many
appears to be much faster than create
but skips validations (Mongoid 8.1.2). –
Pitre Mongoid's Model.create
method can accept an array to create documents.
From the Mongoid docs:
Person.create([
{ first_name: "Heinrich", last_name: "Heine" },
{ first_name: "Willy", last_name: "Brandt" }
])
https://docs.mongodb.org/ecosystem/tutorial/mongoid-persistence/
© 2022 - 2024 — McMap. All rights reserved.