Пакетная вставка нескольких записей с Mongoid?

Я читаю этот ответ Stackru о том, как вставить несколько документов в Mongoid в один запрос. Из ответа я прочитал:

batch = [{:name => "mongodb"}, {:name => "mongoid"}]  
Article.collection.insert(batch)

Мне нужен пример, чтобы понять, как это работает. Скажем, у нас есть класс Article:

class Article
  include Mongoid::Document
  include Mongoid::Timestamps

  field :subject,   type: String
  field :body,      type: String
  field :remote_id, type: String

  validates_uniqueness_of :remote_id

  belongs_to :news_paper,   :inverse_of => :articles
end

И я, например, создать массив статей:

[ {subject: "Mongoid rocks", body: "It really does", remote_id: "1234", news_paper_id: "abc"},
{subject: "Ruby rocks", body: "It really does", remote_id: "1234", news_paper_id: "abc"},
{subject: "Rails rocks", body: "It really does", remote_id: "5678", news_paper_id: "abc"} ]

Как мне их создать, и в то же время убедиться, что проверка уловила, что у меня есть 2 одинаковых удаленных идентификатора?

1 ответ

Решение

Если вы добавите уникальное индексирование для remote_id MongoDB позаботится об уникальности этого поля

index({ remote_id: 1 }, { unique: true })

Не забудьте запустить create_indexes: rake db:mongoid:create_indexes

После этого вы можете свободно использовать Article.collection.insert(batch),

Другие вопросы по тегам