Search code examples
clojurenoir

Keeping a global monger connection accessible from all models


Being new at both Clojure, Noir and Monger I'm facing just a small issue. As seems standard in Noir I keep my models in src/app_name/model_name.clj

The problem I'm facing is that I need to make the same connection to MongoDB in each model, as I don't know how to properly "share" the connection, like so:

(ns app.models.theme
 (:require [monger.collection :as mc]
            [monger.core :as mg]))

(mg/connect!)
(mg/set-db! (mg/get-db "app_development"))

; Do stuff

How would I go about sharing this connection through the entire app? Thank you.


Solution

  • if you always connect to the same server then just add this in your server.clj (src//server.clj)

    (mg/connect!)
    

    If you only use one db within that server you just add :

    (mg/set-db! (mg/get-db "dbname"))

    to the same file

    otherwise you can do for example on an entry point or anywhere in the code

    (defpage "/dbname/tothis" {:keys [dbname]}
    
      (mg/with-db (mg-get-db dbname))).....