2014-09-01 4 views
2

저장 문서를 저장, 자식 개체가 잘못된 부모 아래에 저장됩니다 : 각 게시물에 이미지가 있어야Mongoid가 : 포함 된 문서가 중첩의 3 단계로 잘못된 부모 아래

user = User.create 
website = user.websites.create 
post = website.posts.create 
post2 = website.posts.create 

post.images.create 
post2.images.create 

puts "#{user.to_json}" 
puts "#{user.reload.to_json}" 

, 그 더러운에 대한 사실 사용자 오브젝트 (user.to_json) =>https://gist.github.com/vdaubry/cdc465d6d5ef84576830

하지만 난 사진은 제 포스트 아래에 매립 사용자 (user.reload.to_json) =>https://gist.github.com/vdaubry/a9c217a467dd9ff9a7fb

,536,913를 다시 때

버그입니까 아니면 분명하지 않은 것이 있습니까?

class User 
    include Mongoid::Document 
    embeds_many :websites 
end 

class Website 
    include Mongoid::Document 
    include Mongoid::Timestamps 
    embedded_in :user 
    embeds_many :posts 

end 

class Post 
    include Mongoid::Document 
    include Mongoid::Timestamps 

    embedded_in :website 
    embeds_many :images 
end 
class Image 
    include Mongoid::Document 
    include Mongoid::Timestamps 
    embedded_in :post 
end 

내 gemfile :

ruby 2.1.2p95 
gem 'rails', '~> 4.1.4' 
gem 'mongoid', '~> 4.0.0' 

답변

1

그것은, 나는 확실히 버그가 아니에요있어하는 일에 종료 버그가 존재 Mongoid 또는 MongoDB를 여기

는 클래스이를 재현하는 데 사용되는 정의입니다 . 그것은 Mongoid가 위치 연산자 "$"로 푸시하는 필드의 키에있는 인덱스를 대체하기 때문에 발생합니다. 즉, "websites.0.posts.1.images"가 "websites.0.posts. $"로 변경됩니다. 이미지 ". 위치 연산자의 문서를 인용

(이탤릭체 내입니다)

갱신() 메소드를 사용

,

  • 먼저 하는 자리로 위치 $ 연산자 작용

    요소
    쿼리 문서와 일치 ,

귀하의 경우 이미지 문서가 작성된 첫 번째 게시 문서에 삽입되므로 이유가 될 수 있습니다.

Mongoid가 왜 (위치 연산자로 대체) 수행하는지 또는 $push 작업이 필요한지 확실하지 않습니다.

이미 문제가 발생 했으므로 저의 의견도 복사하고 있습니다.

0

답장을 보내 주셔서 감사합니다. 같은 문제가있는 사람들에게는 여러 장의 임베디드 레벨을 지원하지 않는 mongo의 한계가 있습니다.

나는 2 레벨의 컬렉션 만 삽입하도록 내 모델을 리팩터링했습니다.

https://jira.mongodb.org/browse/SERVER-831

:
class User 
    include Mongoid::Document 
    has_many :websites 
end 

class Website 
    belongs_to :user 
    embeds_many :posts 
end 

class Post 
    embedded_in :website 
    embeds_many :images 
end 

class Image 
    embedded_in :post 
end 

내가 몽고의 JIRA에서 직접 기본 문제를 upvoting되어이 작업을 얻을 수있는 가장 좋은 방법을 생각 : 그것은 작동
관련 문제