使用Mongo Mapper删除EmbeddedDocuments

时间:2010-08-29 22:10:32

标签: ruby mongomapper

我的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 :(得分:0)

尝试这样的事情,不知道这是否有效,但值得一试。

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

老实说,虽然我觉得你一点也不担心这件事。通常阵列操作非常快。