J'ai googlé et tous les autres, mais je n'ai pas trouvé la réponse. La question est:Insertion/mise à jour par lots en utilisant Mongoid?
Salut, comment puis-je faire l'insertion par lots avec Mongoid à MongoDB?
J'ai googlé et tous les autres, mais je n'ai pas trouvé la réponse. La question est:Insertion/mise à jour par lots en utilisant Mongoid?
Salut, comment puis-je faire l'insertion par lots avec Mongoid à MongoDB?
Vous pouvez insérer une série de hachages par lots en utilisant la méthode d'insertion du pilote ruby mongo. À partir de n'importe quelle classe Mongoid, vous pouvez appeler collection pour y accéder.
batch = [{:name => "mongodb"}, {:name => "mongoid"}]
Article.collection.insert(batch)
Si vous souhaitez lot insérer des documents MongoId (modèles) au lieu de hash, appelez votre méthode de as_document de modèle avant de le placer dans un tableau:
@page_views << page_view.as_document
...
PageView.collection.insert(@page_views)
Ne passe pas la validation – Viren
Je reçois cette erreur méthode indéfinie 'as_document 'pour #
@AbhayKumar 'as_document' ne fonctionne pas contre un tableau, seulement des objets uniques. Si vous avez déjà un tableau d'objets, vous pouvez l'appeler comme suit: 'PageView.collection.insert (@ page_views.map (&: as_document))' qui mappera tous les objets aux documents avant l'insertion. – Jay
La méthode Model.create
de Mongoid peut accepter un tableau pour créer des documents.
Des MongoId docs:
Person.create([
{ first_name: "Heinrich", last_name: "Heine" },
{ first_name: "Willy", last_name: "Brandt" }
])
https://docs.mongodb.org/ecosystem/tutorial/mongoid-persistence/
Cela les crée encore un par un :( – unflores
Vous pouvez utiliser ceci:
books = [{:name => "Harry Potter"}, {:name => "Night"}]
Book.collection.insert_many(books)
Et je trouve que "insérer" ne fonctionne pas pour moi (Monogoid 5.1.3):
NoMethodError: undefined method `insert' for # <Mongo::Collection:0x007fbdbc9b1cd0>
Did you mean? insert_one
insert_many
inspect
Voici le code source de "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 point très important à retenir est que ce faisant, vous suspendez les options de mongoid.yml. Donc, si vous l'utilisez, assurez-vous de les informer si vous avez besoin, par exemple: Article.with (safe: true) .collection.insert (lot) – bakkay
Je reçois NoMethodError: méthode non définie 'insert ' – tomascharad
Moi aussi. Posée une question à ce sujet http://stackoverflow.com/questions/33894132/mongocollection-undefined-method-insert – Mika