在MongoDB中复制属性
因此,我在mongo中有一个集合,其中包含在MongoDB中复制属性,mongodb,mongoid,Mongodb,Mongoid,因此,我在mongo中有一个集合,其中包含created_at字段,我正在尝试为每个文档添加一个sort_date属性,该属性最初与created_at相同,但用户可以修改。我正在将Mongoid与Rails一起使用,并试图编写一个迁移,我想知道是否有一种聪明(读:高效)的方法可以将一个属性的值复制到另一个属性,而无需mapReduce或在Ruby中循环模型。谢谢 请注意,当您使用MongoDB时,不需要迁移——迁移只需要用于SQL DB 使用MongoDB,您只需更改模型中的属性,例如: cl
created_at
字段,我正在尝试为每个文档添加一个sort_date
属性,该属性最初与created_at
相同,但用户可以修改。我正在将Mongoid与Rails一起使用,并试图编写一个迁移,我想知道是否有一种聪明(读:高效)的方法可以将一个属性的值复制到另一个属性,而无需mapReduce或在Ruby中循环模型。谢谢 请注意,当您使用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
如果需要对新属性进行适当的初始化,可以在控制台中或通过Rake运行脚本
另见:
回答我自己的问题:
不幸的是,这似乎是目前最好的选择。我想至少它比mapReduce简单。找到了解决办法
对-我指的是第二部分。这是可行的,但正如我所说的,我很好奇是否有可能在ruby中更新所有文档而不必遍历每个文档。在mapReduce中进行实验…可能很难做到,因为每个记录都包含一个不同的值——所以除非你在并行计算机上,否则你必须按顺序触摸每个记录——不管你是否可以用漂亮的语法声明——它仍然必须按顺序进行——除非你周围有一个巨大的计算场,如果你在其中使用切分的话MongoDB,你可以在每个碎片上运行这个并行程序——这将是一个小小的收获
YourCollection.each do |c|
c.sort_date = c.created_a
c.save(:validate => false)
end
db.mycoll.find({}).forEach(function(doc){
db.mycoll.update({_id: doc._id}, {$set: {sort_date: doc.created_at}});
});