2011-10-17 35 views
0

好吧,讓我試着解釋我正在努力實現的目標...MongoDB:如何查詢或只包含具有特定屬性值的嵌入式文檔的容器文檔?

假設我有一個嵌套房間的集合HOUSE。每棟房子都有很多房間。 假設每個房間都有一個顏色屬性(藍色,紅色,綠色等)

現在,如果我想檢索所有房間的顏色爲藍色的房屋,我可以繼續前進,實例

House.where(:'rooms.color' => :blue) 

但是我真正想要的是查詢所有隻有藍色房間的房屋。而且我不知道該怎麼做......我可以在HOUSE層面創建一個新的屬性來「標記」房間是否具有相同的顏色......但是我寧願避免這種情況,因爲我可以目前的數據集將需要升級以反映這一點。

感謝,

亞歷

回答

0

您是否嘗試過?

House.only(:'rooms.color' => :blue) 
+0

這不是「only」與mongoid的函數,它會限制顯示給定文檔的字段,防止在沒有必要的情況下加載所有數據。感謝您嘗試:) – Alex

+0

啊,對不起,我想我完全不明白這個問題。 – janders223

0

它與退後一步思考......實際上,我是要在這個錯誤的方式,有時你不得不否定:)

基本上有一所房子,只有藍色的房間,意味着這房子沒有其他顏色的房間... ...

所以想象一下,我有一套可能的顏色,如::red:green:blue然後爲了找到只有藍色房間的房子,我只需要尋找沒有的房子:紅色或:綠色房間:)

House.where(:'rooms.color'.nin => [:red, :green]) 

應該做的伎倆:)

亞歷

0

@Alex你是你的數據集的更好的判斷,但理論上也之後應該做的伎倆。

house_ids = House.where("rooms.color" => :blue).only(:_id).map(&:_id) 
unwanted_house_ids = House.where("rooms.color".to_sym.ne => :blue).only(:_id).map(&:_id) 
houses_with_only_blue_rooms = House.all.for_ids(house_ids - unwanted_house_ids) 
相關問題