Ruby datajob с монгоидом - PullRequest
0 голосов
/ 11 мая 2011

Я пытаюсь использовать ruby ​​и mongoid для извлечения некоторых данных из базы данных oracle и в мою mongoDB, чтобы выполнить пару операций над ним.

Вопрос:

Я создал свой класс 'Record' с включением Mongoid :: Document, настроил все мои поля и уже назначил данные, поступающие из базы данных oracle, и все мои объекты BSON хранятся в массиве.

Теперь мой вопрос: как мне их спасти?

Вот мой кусок кода

* * 1010

1 Ответ

1 голос
/ 11 мая 2011

Вам нужно будет сделать Record.collection.insert(records).Обратите внимание, что при этом будут пропущены все проверки, которые вы написали в своей модели Mongoid, но это будет немного быстрее, чем создание mongoid-записей и их сохранение, поскольку при этом будет использоваться драйвер ruby ​​mongo напрямую.Это следует делать только в том случае, если вы знаете, что данные непротиворечивы.

Если вы хотите выполнить все проверки ваших данных перед их сохранением в MongoDB, вам следует создать модель, а не помещать их в массив.

Таким образом, вы можете сохранить данные, извлеченные в MongoDB, тремя способами в соответствии с вашими предпочтениями:

  • Вставьте все записи одновременно, используя драйвер Монго, но будьте осторожны, создаваемый вами массив может быть огромным:
query.each do |row|
  .....
end
Record.collection.insert(records)
  • Вставлять одну запись за раз, используя драйвер монго (замените records << r новой строкой)
query.each do |row|
  .....
  Record.collection.insert(r)
end
  • Вставитьпо одной записи за раз с использованием Mongoid и всех проверок и обратных вызовов (замените records << r новой строкой)
query.each do |row|
  .....
  r.save
end


update: пропущено, что вы уже создаете запись, следовательно, mongoпредложения водителя.Если вы хотите использовать драйвер mongo напрямую, вы должны использовать хэш вместо модели Mongoid.т.е. вместо

r = Record.new
r.status = row[:status]
# copy more data

вы должны сделать

r = {}
r[:status] = row[:status]
# copy more data
...