Как использовать множество / пересечение с большими результирующими наборами из 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)))
Другие вопросы по тегам