2013-07-30 62 views

回答

2

如果使用單個數據庫工作那麼最好設置一次連接:

(mg/connect! db-spec) 

但它不是,當你有多個數據庫是一個好主意。蒙格有這種情況with-connection宏(see API docs):

(mg/with-connection db-connection 
    ...) 

您可能您的應用程序的初始化過程中建立的所有連接一次:

(def conn1 (mg/connect db-spec)) 

,然後使用它們:

(mg/with-connection conn1 
    ...) 

更新。在我們的應用程序,我們有所有的數據庫連接的哈希地圖:

(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) 
     [email protected]))) 

mongo-config變量存儲規範我們的所有數據庫和with-db宏很容易通過它們的名字來訪問它們:

(with-db :my-db 
    ...) 
0

現在(版本2.0)對於所有關鍵公共API函數都必須使用顯式DB /連接/ GridFS對象。

這樣:

(require '[monger.collection :as mc]) 

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

爲了得到這個工作:

(let [conn (mg/connect) 
    db (mg/get-db conn "monger-test")] 
     (mc/insert db "libraries" {:name "Monger"})) 

如何使用翻過我的所有代碼的 「DB」 的參考。

相關問題