我今天从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"] ...
谢谢。
我是这样做的:
(defmacro with-db [body]
`(let [conn# (mg/connect)
db# (mg/get-db conn "monger-test")]
(-> db#
~body)))
像这样使用:
(with-db (mc/find-maps "mycoll"))
您也可以在不定义宏的情况下做到这一点,只使用一个普通的旧函数:
(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"的集合中的所有条目