에 의해 쿼리하는 방법을 나는 다음과 같은 모델이 있습니다mongoid - 포함 된 개체
class User
include Mongoid::Document
store_in :users
field :full_name, :type => String
end
class Message
include Mongoid::Document
embeds_one :sender, :class_name => "User"
field :text, :type => String
end
나는 그들이 직접 조회 할 수 있도록 분리 된 독립형 컬렉션에 User
및 Message
를 저장하고 싶은, 내가하고 싶은를 각 메시지 항목에 sender
에 대한 사용자 사본 1 부. 내 모델이 이런 종류의 요청에 맞습니까?
사용자 user
의 인스턴스가있는 경우 어떻게 메시지를 쿼리 할 수 있습니까? sender = user
?
이 나는 시도했다 : 이 Message.where(:sender => user)
Message.where('sender.id' => user.id)
모두 작동하지.
Message.where('sender.full_name' => user.full_name)
만 사용했지만 사용할 ID 필드가있을 때 텍스트 필드를 사용하고 싶지 않습니다.
어떻게해야할까요?
나는 메시지/사용자 저장 방법 :
user = User.new
user.full_name = 'larry'
user.save
m = Message.new(:text => 'a text message')
m.sender = user
m.save
을 그리고 데이터베이스 결과 : 당신은 당신이 무엇을 할 수 없어
> db.users.find({ 'full_name' : 'larry'})
> db.messages.find({})[0]
{
"_id" : ObjectId("4f66e5c10364392f7ccd4d74"),
"text" : "a text message",
"sender" : {
"_id" : ObjectId("4f62e0af03642b3fb54f82b0"),
"full_name" : "larry"
}
}
정확합니다. 이것을 대답으로 변환 할 수 있습니다. 그러나 나는 아직도 조금 혼란 스럽다. 나는 항상'Message.where (: sender => user)'가 그것을 할 수있는 방법이라고 생각한다. – larryzhao