查詢我有以下型號: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
的用戶的一個副本。我的模型對於這種請求是否正確?
而當我有一個用戶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 2012-03-19 08:26:56