Как использовать множество / пересечение с большими результирующими наборами из MongoDB
У меня есть функция photos-with-keyword-starting
который получает списки фотографий для данного ключевого слова из экземпляра MongoDB, используя monger, и другой, который находит подмножества этих фотографий, используя set/intersection
,
(defn photos-with-keywords-starting [stems]
(apply set/intersection
(map set
(map photos-with-keyword-starting stems))))
Ранее я думал, что это работает нормально, но поскольку добавление большего количества записей пересечение не работает должным образом - оно пропускает множество записей, которые имеют оба ключевых слова.
Я замечаю, что вызовы функции photos-with-keyword-starting
всегда возвращать максимум 256 результатов:
=> (count (photos-with-keyword-starting "lisa"))
256
Вот код этой функции:
(defn photos-with-keyword-starting [stem]
(with-db (q/find {:keywords {$regex (str "^" stem)}})
(q/sort {:datetime 1})))
Так как вызовы для поиска записей в MongoDB не возвращают все записи, если их больше 256, я не получаю правильные подмножества при указании более одного ключевого слова.
Как мне увеличить этот лимит?
1 ответ
Вы можете просто конвертировать дату и время в вашей функции photos-with-keyword-starting
например, строку, если вы можете жить с этим.
В качестве альтернативы вы можете удалить логические дубликаты из вашего вывода, например, так:
(->>
-your-result-
(group-by #(update % :datetime str))
(map (comp first val)))