0

私は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 黒猫だけを選び、その代わりにその配列を選ぶ方法があるはずだと思います。そのような方法はありますか?

4

1 に答える 1

0

このようなことを試してみてください。これがうまくいくかどうかはわかりませんが、一見の価値があります。

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

正直なところ、これについては何の心配もありません。通常、配列操作は非常に高速です。

于 2010-08-30T20:50:25.437 に答える