Удаление вложенных документов с помощью Mongo Mapper - PullRequest
0 голосов
/ 30 августа 2010

У меня mongo_mapper настроен так:

class Person
  include MongoMapper::Document

  many :pets
end

class Pet
  include MongoMapper::EmbeddedDocument

  key :animal, String
  key :name, String
  key :colour, String
end

# Create a person
me = Person.new

# Add pets to the person
me.pets << Pet.new(:animal => 'dog',:name => 'Mr. Woofs', :colour => 'golden')
me.pets << Pet.new(:animal => 'cat', :name => 'Kitty', :colour => 'black')
me.pets << Pet.new(:animal => 'cat', :name => 'Freckles', :colour => 'black')
me.pets << Pet.new(:animal => 'cat', :name => 'Fluffy', :colour => 'tabby')

Я знаю, что могу очень просто удалить всех питомцев (me.pets работает как массив, но также перезванивает)

# Delete all pets
me.pets.clear

Я также знаю, что могу удалить всех черных кошек, выполнив это:

# Delete black cats
me.pets.delete_if {|pet| pet.animal == 'cat' and pet.colour = 'black'}

Но, похоже, потребуется очень много времени, если будет проходить большое количество питомцев.

Я чувствую, что должен быть способ выбрать только черных кошек, а затем вместо этого clear этот массив . Есть ли такой способ?

1 Ответ

0 голосов
/ 31 августа 2010

попробуйте что-то вроде этого, не знаю, сработает ли это, но стоит попробовать.

me.pets.all(:animal => "cat", :colour => "black").clear

Если честно, хотя я думаю, что вы беспокоитесь об этом даром. Обычно манипуляции с массивами выполняются достаточно быстро.

...