与贩子

时间:2015-12-02 08:36:14

标签: mongodb clojure monger

我希望使用这样的搜索模式从clojure访问mongo db:

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

我有一个名为“soulflyer”的数据库,其中包含一个“images”集合,每个成员都有一个“Keywords”字段,其中包含来自其代表的图像的exif关键字数组。 要从mongo java shell中搜索我自己的图像,我这样做:

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 shell中使用如下命令正常工作:

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搜索简单的模式匹配?

1 个答案:

答案 0 :(得分:1)

我不确定monger是否支持开箱即用的子字符串模式匹配,但您可以轻松使用正则表达式。这在mongers query documentation中有记录。您需要使用$regex运算符。以下内容应该有效:

  (mc/find db "images" {"Keywords" {$regex ".*Iain.*"}})