0

次のような検索パターンを使用して、clojure から mongo db にアクセスしたいと考えています。

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

「画像」コレクションを含む「ソウルフライヤー」というデータベースがあり、各メンバーには、それが表す画像からのexifキーワードの配列を含む「キーワード」フィールドがあります。mongo Java シェルから自分の画像を検索するには、次のようにします。

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

すると、キーワード「Iain Wood」を含むすべてのエントリのリストが返されます。replでこれを行うと、これはclojureでも正常に機能します。

(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 を返すか、repl をフリーズしてください。

単純なパターンマッチで clojure/monger を検索するにはどうすればよいですか?

4

1 に答える 1

1

monger がこの部分文字列パターン マッチをすぐにサポートしているかどうかはわかりませんが、正規表現を簡単に使用できます。これは、mongers query documentationに記載されています。$regex演算子を使用する必要があります。次のようなものが機能するはずです。

  (mc/find db "images" {"Keywords" {$regex ".*Iain.*"}})
于 2015-12-02T10:26:17.107 に答える