Пакетная вставка / обновление с использованием Mongoid? - PullRequest
40 голосов
/ 22 сентября 2010

Я гуглил и всех остальных, но не нашел ответа.Вопрос:

Привет, как я могу сделать пакетную вставку с Mongoid в MongoDB?

Ответы [ 4 ]

54 голосов
/ 22 октября 2010

Вы можете вставить пакетный массив хэшей, используя метод вставки драйвера ruby ​​mongo. Из любого класса Mongoid вы можете вызвать коллекцию для доступа к нему.

batch = [{:name => "mongodb"}, {:name => "mongoid"}]  
Article.collection.insert(batch)
26 голосов
/ 12 сентября 2011

Если вы хотите пакетную вставку документов Mongoid (моделей) вместо хешей, вызовите метод as_document вашей модели перед помещением ее в массив:

@page_views << page_view.as_document

...

PageView.collection.insert(@page_views)
5 голосов
/ 08 июля 2016

Вы можете использовать это:

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
2 голосов
/ 04 февраля 2016

Метод 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/

...