Как обновить все внедренные документы для определенного столбца в таблице в Mongoid? - PullRequest
1 голос
/ 02 апреля 2012

В настоящее время у меня есть столбец address, который является вложенным документом в моей таблице users. Столбец address содержит _id для связанных строк в таблице address. Каждый user может иметь несколько addresses, поэтому в столбце user address может быть несколько встроенных документов, если у этого пользователя более одного адреса.

Как удалить все address вложенные документы для определенного адреса id? В моем случае, когда пользователь удаляет адрес, я хочу удалить этот конкретный адрес из ALL из address вложенных документов в таблице пользователей.

Возможно ли это в консоли рельсов?

Спасибо

Ответы [ 2 ]

1 голос
/ 02 апреля 2012

Вы можете сделать:

User.where('addresses.id' => address.id).each do |u|
  u.addresses.where(:id => address.id).delete
  u.save
end
0 голосов
/ 02 апреля 2012

Вы также можете сделать:

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

Это не запустит никаких обратных вызовов. Если вам нужны какие-либо обратные вызовы, вы должны использовать метод Шингара, но заменить delete на destroy

...