Monger Clojure上的“共享”连接

时间:2014-07-16 23:49:51

标签: mongodb clojure monger

我今天开始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"] ...

感谢。

2 个答案:

答案 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”

的集合中的所有条目