与monger一起使用搜索模式



我希望使用以下搜索模式从clojure访问mongo数据库:

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

我有一个名为"灵魂飞行者"的数据库,其中包含一个"图像"集合,每个成员都有一个"关键字"字段,其中包含它所代表的图像中的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"}))

但是,我想在关键字上搜索部分匹配。这在javashell中可以通过以下命令正常工作:

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

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

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

相关内容

  • 没有找到相关文章

最新更新