"Shared" 蒙格·克洛朱尔的连接



我今天从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"的集合中的所有条目

相关内容

  • 没有找到相关文章

最新更新