Пакетный вызов для сохранения «новых» объектов в монгоиде - PullRequest
2 голосов
/ 09 июня 2011
  1. Инициализируется большой массив объектов (Photo.new).
  2. Некоторая фильтрация выполняется для массива Photo, поэтому остается 30% из них.
  3. Оставшийся массив сохраняется в одном вызове.

Вопросы

  1. Какова команда для выполнения шага 3, который по сути является пакетным сохранением?
  2. Есть ли ограничение на количество объектов, которые я могу сохранить одновременно?

Ответы [ 2 ]

3 голосов
/ 09 июня 2011

Я не знаком с драйвером Ruby Mongoid, но похоже, что вы ищете что-то вроде:

photos.map &:save

Если вы пытаетесь сделать это менее итеративным способом (т. Е. Одним вызовом), похоже, что драйвер Ruby Mongoid поддерживает метод insert для сохранения массива хэшей:

Photo.collection.insert(photos)

Источник: Пакетная вставка / обновление с использованием Mongoid?

1 голос
/ 09 июня 2011

Да, есть ограничение.Все, что вы собираетесь пакетно вставить, используя только что описанный метод coreyward, должно быть в пределах 16M (ограничение размера документа MongoDB).Смотрите здесь:

https://github.com/mongodb/mongo-ruby-driver/commit/4712a684689c11a31221c87354e5ae0864960226

Таким образом, вы должны оценить размер байта вашего массива и разбить его на несколько частей, если он превышает 16M.

...