mongoid: выберите элементы, которые имеют по крайней мере n элементов в массиве

В 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 которые разделяют по крайней мере два идентификатора с [id1,id2,id3]

Спасибо!

1 ответ

Решение

Я не знаю чистого монгоидного решения. Я также не нашел такой запрос в руководстве 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}
Другие вопросы по тегам