1

在 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)返回任何Item至少共享两个 id 的东西[id1,id2,id3]

谢谢 !

4

1 回答 1

1

我不知道纯 Mongoid 解决方案。我也没有在 MongoDB 手册中找到这样的查询:http: //docs.mongodb.org/manual/reference/operator/query-array/

我会混合使用 Mongoid 和数组操作。它的缺点是,将加载至少具有这些标签中的 1 个的所有项目。

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}
于 2014-09-26T12:28:37.810 回答