Использование поисковых шаблонов с monger

Я хочу получить доступ к базе данных Монго из clojure, используя такие шаблоны поиска:

find({Keywords: /search-pattern/})

У меня есть база данных под названием "soulflyer", содержащая коллекцию "images", и у каждого члена есть поле "Keywords", содержащее массив ключевых слов exif из изображения, которое он представляет. Чтобы найти свои изображения из Java-оболочки Монго, я делаю это:

db.getCollection('images').find({Keywords: "Iain Wood"})

и я получаю список всех записей, которые содержат ключевое слово "Iain Wood". Это также прекрасно работает в clojure, если я сделаю это в repl:

(def connection (mg/connect))
(def db (mg/get-db connection "soulflyer"))
(seq (mc/find db "images" {"Keywords" "Iain Wood"}))

Тем не менее, я хочу найти частичные совпадения по ключевым словам. Это работает нормально из оболочки Java с помощью команды, подобной этой:

db.getCollection('images').find({Keywords: /Iain/})

Как и ожидалось, я возвращаю все изображения с ключевым словом, которое содержит "Iain". Однако я не могу найти, как сделать эту работу из clojure.

(seq (mc/find db "images" {"Keywords" "/Iain/"}))

возвращает пустой список

(seq (mc/find db "images" {"Keywords" /Iain/}))
(seq (mc/find db "images" {"Keywords" '/Iain/'}))
(seq (mc/find db "images" {"Keywords" \/Iain\/}))
(seq (mc/find db "images" {"Keywords" "\/Iain\/"}))

дай мне LispReader$ReaderException или заморозь репл.

Как мне заставить clojure/monger искать простое совпадение с образцом?

1 ответ

Решение

Я не уверен, что monger поддерживает это сопоставление с образцом подстроки из коробки, но вы можете легко использовать регулярные выражения. Это задокументировано в документации запроса монгеров. Вам нужно использовать $regex оператор. Должно работать что-то вроде следующего:

  (mc/find db "images" {"Keywords" {$regex ".*Iain.*"}})
Другие вопросы по тегам