Ruby on rails mongoid:选择数组中至少有n个元素的元素

Ruby on rails mongoid:选择数组中至少有n个元素的元素,ruby-on-rails,mongoid,mongodb-query,moped,Ruby On Rails,Mongoid,Mongodb Query,Moped,在mongoid中,您可以查询数组中至少包含一个元素的项: Item.any\u in(标记ID:[id1、id2、id3]) 您还可以选择阵列中包含所有元素的元素: Item.all\u in(标记ID:[id1、id2、id3]) 我的问题:有没有办法查询数组中至少有n个元素的元素 我想查询类似项的内容。至少(标记ID:[id1,id2,id3],n:2)返回与[id1,id2,id3]至少共享两个ID的项 谢谢 我不知道一个纯Mongoid解决方案。我在MongoDB手册中也没有找到这样的

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

Item.any\u in(标记ID:[id1、id2、id3])

您还可以选择阵列中包含所有元素的元素:

Item.all\u in(标记ID:[id1、id2、id3])

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

我想查询类似
项的内容。至少(标记ID:[id1,id2,id3],n:2)
返回与
[id1,id2,id3]至少共享两个ID的


谢谢

我不知道一个纯Mongoid解决方案。我在MongoDB手册中也没有找到这样的查询:

我会混合使用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}

我认为这是一个可以接受的解决方案。另外,在第一个请求中,您可以要求mongoid仅加载ID而不是整个对象。谢谢你的提示!