在MongoDB中复制属性

在MongoDB中复制属性,mongodb,mongoid,Mongodb,Mongoid,因此,我在mongo中有一个集合,其中包含created_at字段,我正在尝试为每个文档添加一个sort_date属性,该属性最初与created_at相同,但用户可以修改。我正在将Mongoid与Rails一起使用,并试图编写一个迁移,我想知道是否有一种聪明(读:高效)的方法可以将一个属性的值复制到另一个属性,而无需mapReduce或在Ruby中循环模型。谢谢 请注意,当您使用MongoDB时,不需要迁移——迁移只需要用于SQL DB 使用MongoDB,您只需更改模型中的属性,例如: cl

因此,我在mongo中有一个集合,其中包含
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}});
});