复制MongoDB中的属性

时间:2011-10-13 00:07:32

标签: mongodb mongoid

所以我在mongo中有一个包含created_at字段的集合,我正在尝试为每个文档添加sort_date属性,该属性最初等于created_at但可修改由用户。我正在使用Mongoid和Rails并尝试编写一个迁移,我想知道是否有一种聪明的(读取:高效)方法将一个属性的值复制到另一个属性而没有mapReduce或循环Ruby中的模型。谢谢!

2 个答案:

答案 0 :(得分:4)

回答我自己的问题:

可悲的是,这似乎是目前最好的选择。我想,至少它比mapReduce更简单。找到了解决方案here

db.mycoll.find({}).forEach(function(doc){
  db.mycoll.update({_id: doc._id}, {$set: {sort_date: doc.created_at}});
});

答案 1 :(得分:-1)

请注意,使用MongoDB时不需要迁移 - 只有SQL DB才需要迁移。

使用MongoDB,您只需更改模型中的属性,例如:

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

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

end

...然后创建一个可用于初始化数据的脚本。

e.g。

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

如果需要对新属性进行适当的初始化,可以在控制台中运行脚本,或者通过Rake

运行

另见: http://railscasts.com/episodes/238-mongoid