【问题标题】:Deleting EmbeddedDocuments with Mongo Mapper使用 Mongo Mapper 删除 EmbeddedDocuments
【发布时间】:2010-08-31 04:50:25
【问题描述】:

我的 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 那个 数组。有没有这样的方法?

【问题讨论】:

    标签: ruby mongomapper


    【解决方案1】:

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

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

    老实说,虽然我认为你无缘无故地担心这个。通常数组操作非常快。

    【讨论】:

    • 感谢您的回复,但不幸的是:NoMethodError: undefined method ‘all’ for []:Array。我知道这样的集合迭代数组不会花费大量时间,但我希望一次处理 10,000 个嵌入文档的顺序,并且最多只需要删除 ~10 !
    • JP,您认为使用您目前所知的最快方式清空 1000 个嵌入文档需要多长时间?
    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多