j'ai mongo_mapper mis en place comme ceci:Suppression EmbeddedDocuments avec 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')
Je sais que je peux supprimer tous les animaux de compagnie très simplement (me.pets
fonctionne comme un tableau, mais appelle également de retour)
# Delete all pets
me.pets.clear
Je sais aussi que je pourrais supprimer tous les chats noirs en faisant ceci:
# Delete black cats
me.pets.delete_if {|pet| pet.animal == 'cat' and pet.colour = 'black'}
Mais cela semble comme si cela prenait beaucoup de temps s'il y avait un grand nombre d'animaux à parcourir.
Je pense qu'il devrait y avoir un moyen de sélectionner uniquement les chats noirs, puis clear
ce tableau à la place. Y a-t-il un tel moyen?
J'apprécie la réponse mais malheureusement: 'NoMethodError: méthode indéfinie 'all' for []: Array'. Je comprends que pour des collections comme celle-ci, l'itération sur un tableau ne prendra pas beaucoup de temps, mais je m'attends à traiter 10 000 documents imbriqués à la fois, et je ne devrai effacer que ~ 10 ! –
JP, combien de temps diriez-vous qu'il faut vider dire, 1000, documents intégrés en utilisant le moyen le plus rapide que vous connaissez à partir de maintenant? –