mongoid:选择数组中至少包含n个元素的元素

时间:2014-09-25 07:27:45

标签: ruby-on-rails mongoid mongodb-query moped

在mongoid中,您可以查询在数组中至少包含一个元素的项目:

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

您还可以选择在数组中包含所有元素的元素:

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

我的问题:有没有办法查询数组中至少 n元素的元素?

我想查询Item.at_least(tag_ids: [id1,id2,id3], n: 2)之类的内容,以便返回与[{1}}

共享至少两个ID的任何Item

谢谢!

1 个答案:

答案 0 :(得分: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}