Как удалить встроенный документ в MongoMapper с помощью атомарного Pull? - PullRequest
3 голосов
/ 06 ноября 2010

Я успешно использую встроенную поддержку MongoMapper для атомарных «$ push» и «$ set», но не могу понять «$ pull»

class Feed
  include MongoMapper::Document
  many :stories
end

class Story
  include MongoMapper::EmbeddedDocument
  key :title, String
end

feed = Feed.first
story = Story.new(:title => "Hello, world!") 
Feed.push(feed.id, :stories => story.to_mongo) #works fine
Feed.set({:_id => feed.id, "stories.title" => "Hello, world!"}, "stories.$.title" => "Foo") #works fine

Feed.pull( ??? )

Как атомарно удалитьистория с использованием тяги?

1 Ответ

7 голосов
/ 06 ноября 2010

Чтобы атомарно удалить встроенный документ, используя просто родительский идентификатор и дочерний идентификатор, вы можете сделать это:

Feed.pull(feed.id, :stories => {:_id => story.id})

Если у вас уже есть родительский документ, вы можете сделать это вместо этого:

feed.pull(:stories => {:_id => story.id}) 

Теперь мне стыдно задавать вопрос (и отвечать на него).Это довольно просто.

...