копирование атрибутов в MongoDB - PullRequest
2 голосов
/ 13 октября 2011

Итак, у меня есть коллекция в монго с полями created_at, и я пытаюсь добавить атрибут sort_date к каждому документу, который изначально будет равен created_at, но может изменяться пользователем. Я использую Mongoid с Rails и пытаюсь написать миграцию, и мне интересно, есть ли умный (читай: эффективное ) способ скопировать значение одного атрибута в другой без mapReduce или циклически перебирая модели в рубине. Спасибо!

Ответы [ 2 ]

4 голосов
/ 13 октября 2011

Отвечая на мой вопрос:

К сожалению, сейчас это лучший вариант. По крайней мере, это проще, чем mapReduce, я полагаю. Нашел решение здесь .

db.mycoll.find({}).forEach(function(doc){
  db.mycoll.update({_id: doc._id}, {$set: {sort_date: doc.created_at}});
});
0 голосов
/ 13 октября 2011

Обратите внимание, что при использовании MongoDB не требуется никаких миграций - миграции нужны только для баз данных SQL.

С MongoDB вы можете просто изменить атрибуты в вашей модели, например:

class YourCollection
  include Mongoid::Document
  include Mongoid::Timestamps

  # add a field to your field definitions:
  field :sort_date , :Type => Time

end

... затем создайте скрипт, который вы можете использовать для инициализации данных.

например,

YourCollection.each do |c|
  c.sort_date = c.created_a
  c.save(:validate => false)
end

Если вам нужна правильная инициализация для нового атрибута, вы можете запустить скрипт в консоли или через Rake

См. Также: http://railscasts.com/episodes/238-mongoid

...