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