我今天开始monger,文档使用这样的示例:
(let [conn (mg/connect)
db (mg/get-db conn "monger-test")
coll "documents"]
(mc/insert db coll {:first_name "John" :last_name "Lennon"})
(mc/insert db coll {:first_name "Ringo" :last_name "Starr"})
(mc/find db coll {:first_name "Ringo"}))
所有文档示例都使用该结构。始终连接到MongoDB,然后在 mc / insert ...上使用 db 。问题是,我如何将这段代码放在一个函数上并在我执行mongodb查询的函数中使用它,而不是一直重复下面的代码:
(let [conn (mg/connect)
db (mg/get-db conn "monger-test")
coll "documents"] ...
感谢。
答案 0 :(得分:1)
我是这样做的:
(defmacro with-db [body]
`(let [conn# (mg/connect)
db# (mg/get-db conn "monger-test")]
(-> db#
~body)))
像这样使用:
(with-db (mc/find-maps "mycoll"))
答案 1 :(得分:0)
你也可以在不定义宏的情况下这样做,只使用一个普通的旧函数:
(def db-name "monger-test")
(defn with-db [op & args]
(let [conn (mongo/connect)
db (mongo/get-db conn db-name)]
(apply op db args)))
(with-db monger.collection/find-maps "test-collection")
将列出名为“test-collection”
的集合中的所有条目