1

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

谢谢。

4

2 回答 2

1

我是这样做的:

(defmacro with-db [body]
  `(let [conn# (mg/connect)
         db# (mg/get-db conn "monger-test")]
    (-> db#
        ~body)))

像这样使用:

(with-db (mc/find-maps "mycoll"))
于 2014-07-22T14:54:17.553 回答
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”的集合中的所有条目

于 2015-06-05T23:40:36.740 回答