2014-09-25 53 views
1

至少n個元素在mongoid元素可以查詢在陣列至少一個元素項:mongoid:選擇具有在陣列

Item.any_in(tag_ids: [id1,id2,id3])

您也可以選擇具有所有元素的元素在陣列:

Item.all_in(tag_ids: [id1,id2,id3])

我的問題:有沒有辦法查詢元件t帽子有至少n數組中的元素?

我想查詢像Item.at_least(tag_ids: [id1,id2,id3], n: 2)返回共有至少兩個ID與[id1,id2,id3]

感謝任何Item

回答

1

我不知道一個純粹的Mongoid解決方案。我在MongoDB手冊中也沒有找到這樣的查詢:http://docs.mongodb.org/manual/reference/operator/query-array/

我會使用Mongoid和數組操作的混合。 它的缺點是,所有至少有一個這些標籤的項目將被加載。

searched_tag_ids = ['54253ad452656b1d25000000','54253adc52656b1d25010000','54253ae352656b1d25020000'] 
items_with_min_1_searched_tag = Item.any_in(tag_ids: searched_tag_ids).to_a 
items_with_min_2_searched_tag = items_with_min_1_searched_tag.select{|item| (item.tag_ids.collect{|tag_id| tag_id.to_s} & searched_tag_ids).size >=2} 
+0

我認爲這是一個相當可以接受的解決方案。另外,在第一個請求中,你可以讓mongoid只加載id而不是整個對象。謝謝你的提示 ! – aherve 2014-09-26 13:28:31