首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用monger时,是否需要提供每个请求的连接?

在使用monger时,是否需要提供每个请求的连接?
EN

Stack Overflow用户
提问于 2013-07-30 15:17:31
回答 2查看 607关注 0票数 1

在文件中,mongodb连接在未将连接传递给每个命令之前只建立一次,这是使用monger的正确方式,还是应该将数据库连接传递给每个调用?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-30 15:38:57

如果您使用单个数据库,那么最好只设置一次连接:

代码语言:javascript
复制
(mg/connect! db-spec)

但是,当您有多个数据库时,这不是一个好主意。在这种情况下,Monger拥有with-connection宏(见API文档):

代码语言:javascript
复制
(mg/with-connection db-connection
  ...)

您可以在应用程序初始化期间建立所有连接一次:

代码语言:javascript
复制
(def conn1 (mg/connect db-spec))

然后使用它们:

代码语言:javascript
复制
(mg/with-connection conn1
  ...)

Update.在我们的应用程序中有一个包含所有数据库连接的哈希映射:

代码语言:javascript
复制
(def  ^:dynamic
      ^clojure.lang.PersistentArrayMap
      *connections*
      {})

(defn connect! [db]
  {:pre [(contains? mongo-config db)]}
  (if (-> db *connections* nil?)
      (let [conn (mg/connect (get mongo-config db))]
        (alter-var-root #'*connections*
                        assoc
                        db
                        { :conn conn
                          :db   (mg/get-db conn (name db))})))
  (-> *connections* db :conn))

(defmacro with-db [db & body]
  "Eval body using :amonplus or :statistic db"
  `(mg/with-connection (connect! ~db)
    (mg/with-db        (clojure.core/-> *connections* ~db :db)
      ~@body)))

mongo-config变量为我们的所有数据库存储规范,with-db宏使按它们的名称访问它们变得非常容易:

代码语言:javascript
复制
(with-db :my-db
  ...)
票数 2
EN

Stack Overflow用户

发布于 2014-07-17 01:01:59

现在(2.0版)对于所有关键的公共API函数使用一个显式DB/connection/GridFS对象是必要的。

因此:

代码语言:javascript
复制
(require '[monger.collection :as mc])

(mc/insert db "libraries" {:name "Monger"})

为了得到这份工作:

代码语言:javascript
复制
 (let [conn (mg/connect)
     db   (mg/get-db conn "monger-test")]
      (mc/insert db "libraries" {:name "Monger"}))

如何使用"db“引用跨越了我的所有代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17950969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档