2013-04-05 74 views
2

我是新的mongodb。Mongoid:渴望加載計數has_many association

我想列出一些文件,我的班級有一個has_many關聯,我想顯示這個關聯文件的數量。

我需要做一些急切的加載嗎?

如果我使用includes所有的文件都會被加載,我只想要計數。

標識映射啓用

回答

0

我不知道的方式,以避免預先加載從加載完整的文檔。我很想知道現在是否有可能。

你可以得到數是這樣的:

ChildDoc.where(myclass_id: myclass_obj.id).count 

所以要查詢在關聯的隱式創建的外鍵字段。這仍然是每個父文檔的查詢,但理想的快速查詢。

如果PERF對你是一個真正的關心,你可以寫,將返回更多的數據,但在單次行程單查詢 - 所包含的文檔中所有的ID - 這樣的:

ChildDoc.where(myclass_id: {"$in" => list_of_myclass_objs.map {|x| x.id}}).only(:id, :myclass_id) 

既然你是新手,我會補充說你可能想自己在FK字段上創建索引--mongoid不會爲你做這個。

class ChildDoc 
    include Mongoid::Document 
    belongs_to :myclass 
    index({ myclass_id: 1 }) 
end 

然後

rake db:mongoid:create_indexes