【问题标题】:"Shared" Connection on Monger ClojureMonger Clojure 上的“共享”连接
【发布时间】:2015-06-06 08:15:41
【问题描述】:

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

谢谢。

【问题讨论】:

标签: mongodb clojure monger


【解决方案1】:

我是这样做的:

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

这样使用:

(with-db (mc/find-maps "mycoll"))

【讨论】:

  • 很好,我会尽快尝试。谢谢
【解决方案2】:

您也可以在不定义宏的情况下执行此操作,只使用一个普通的旧函数:

(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”的集合中的所有条目

【讨论】:

  • 在每个函数调用上都实例化一个连接对吗?相反,我认为应该在变量中定义一次连接,然后重用它,您的连接示例不会产生可避免的性能成本
猜你喜欢
  • 2022-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
  • 2010-09-09
  • 2015-07-02
相关资源
最近更新 更多