如何更新Mongoid表中特定列的所有嵌入文档?

时间:2012-04-01 20:43:51

标签: ruby-on-rails mongodb mongoid

目前我的address列是我users表中的嵌入式文档。 address列包含_id表中相关行的address。每个user可以有多个addresses,因此如果该用户有多个地址,user address列中可能会有多个嵌入式文档。

如何删除特定地址address的所有id嵌入式文档?在我的情况下,当用户删除地址时,我想从users表中的address嵌入文档的 ALL 中删除该特定地址。

这可以在rails控制台中使用吗?

由于

2 个答案:

答案 0 :(得分:1)

你可以这样做:

User.where('addresses.id' => address.id).each do |u|
  u.addresses.where(:id => address.id).delete
  u.save
end

答案 1 :(得分:0)

你也可以这样做:

while User.where('addresses._id' => address.id).count > 0
  User.collection.update({'addresses._id' => address.id},
      {'$pull' => { :addresses => { '_id' => address.id } } },
      :multi => true)
end

这不会运行任何回调。如果您需要任何回调,则应使用shingara的方法,但将delete替换为destroy