2010-09-22 14 views

Respuesta

53

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) 
+5

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

+0

Estoy recibiendo NoMethodError: método indefinido 'insert ' – tomascharad

+0

Yo también. Cuando se le hizo una pregunta al respecto, http://stackoverflow.com/questions/33894132/mongocollection-undefined-method-insert – Mika

25

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) 
+8

Omite la validación – Viren

+1

Me sale este método de error indefinido 'as_document 'para # ¿alguna solución? –

+0

@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

3

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