Busqué en Google y todos los demás, pero no encontré la respuesta. La pregunta es:¿Insertar/actualizar lote usando Mongoid?
Hola, ¿cómo puedo hacer una inserción por lotes con Mongoid en MongoDB?
Busqué en Google y todos los demás, pero no encontré la respuesta. La pregunta es:¿Insertar/actualizar lote usando Mongoid?
Hola, ¿cómo puedo hacer una inserción por lotes con Mongoid en MongoDB?
Puede insertar una matriz de lotes de hashes utilizando el método de inserción del controlador ruby mongo. Desde cualquier clase de Mongoid, puede llamar a la colección para acceder a ella.
batch = [{:name => "mongodb"}, {:name => "mongoid"}]
Article.collection.insert(batch)
Si desea insertar documentos por lotes MongoId (modelos) en lugar de hashes, llamar al método as_document de su modelo antes de colocarlo en serie:
@page_views << page_view.as_document
...
PageView.collection.insert(@page_views)
Omite la validación – Viren
Me sale este método de error indefinido 'as_document 'para #
@AbhayKumar 'as_document' no funciona en una matriz, solo objetos individuales. Si ya tiene una matriz de objetos, puede llamarlo de la siguiente manera: 'PageView.collection.insert (@ page_views.map (&: as_document))' que correlacionará todos los objetos con los documentos antes de la inserción. – Jay
El método Model.create
de Mongoid puede aceptar una matriz para crear documentos.
De los documentos MongoId:
Person.create([
{ first_name: "Heinrich", last_name: "Heine" },
{ first_name: "Willy", last_name: "Brandt" }
])
https://docs.mongodb.org/ecosystem/tutorial/mongoid-persistence/
Eso todavía los crea uno por uno :( – unflores
Se puede utilizar esta:
books = [{:name => "Harry Potter"}, {:name => "Night"}]
Book.collection.insert_many(books)
Y me parece que "insertar" no funciona para mí (5.1.3 Monogoid):
NoMethodError: undefined method `insert' for # <Mongo::Collection:0x007fbdbc9b1cd0>
Did you mean? insert_one
insert_many
inspect
Este es el código fuente de la "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
Un punto muy importante a tener en cuenta es que al hacer esto está omitiendo opciones mongoid.yml. Entonces, si lo usa, asegúrese de informarle si lo necesita, por ejemplo: Article.with (safe: true) .collection.insert (batch) – bakkay
Estoy recibiendo NoMethodError: método indefinido 'insert ' – tomascharad
Yo también. Cuando se le hizo una pregunta al respecto, http://stackoverflow.com/questions/33894132/mongocollection-undefined-method-insert – Mika