2012-04-01 32 views
1

目前我有一個address列,這是我的users表中的嵌入式文檔。 address列在address表中包含相關行的_id。每個user可以有多個addresses,因此如果該用戶具有多個地址,則可以在useraddress列中包含多個嵌入式文檔。如何更新Mongoid表中特定列的所有嵌入式文檔?

如何刪除特定地址的所有address嵌入文檔id?在我的情況下,當用戶刪除一個地址時,我想從中刪除該特定地址的所有address嵌入式文檔在users表中。

這是可能的軌道控制檯?

感謝

回答

1

你可以這樣做:

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

替換delete這行不通。它沒有找到它,所以返回零。我甚至試過'User.where('addresses.id'=> address.id).first',它返回nil。 – Goalie 2012-04-03 02:18:14

+0

您如何從您的用戶處獲得地址? – shingara 2012-04-03 07:40:13

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的方法,但用destroy

+0

這沒有做任何事情。我甚至嘗試過'User.where('addresses._id'=> address.id)',它返回nil。就像它沒有看到嵌入式文件一樣。 – Goalie 2012-04-03 02:19:56

+0

@Goalie如果您沒有爲地址設置自定義ID並讓mongo設置ID,則沒有任何文檔具有相同的ID(即使是嵌入的ID)。必須有一些其他方法來確定兩個地址是否相同。你應該使用它來代替''addresses._id'=> address.id' – rubish 2012-04-03 07:22:51

相關問題