Mongo Configuration

Default DB

Lift must have at least one MongoDB defined. Define a default db like this:

Lift 3.x:

import com.mongodb.MongoClient
import net.liftweb.util.DefaultConnectionIdentifier
import net.liftweb.mongodb.MongoDB

MongoDB.defineDb(DefaultConnectionIdentifier, new MongoClient, "test")

Lift 2.x:

import com.mongodb.Mongo
import net.liftweb.mongodb.{DefaultMongoIdentifier, MongoDB}

MongoDB.defineDb(DefaultMongoIdentifier, new Mongo, "test")

Multiple Databases

If you need more than one database, define a ConnectionIdentifier for each:

Lift 3.x:

import net.liftweb.util.ConnectionIdentifier
import net.liftweb.mongodb.MongoDB
import com.mongodb.MongoClient

object MainDb extends ConnectionIdentifier {
      val jndiName = "main"
}
MongoDB.defineDb(MainDb, new MongoClient, "test1")

Lift 2.x:

import com.mongodb.Mongo
import net.liftweb.mongodb.{MongoIdentifier, MongoDB}

object MainDb extends MongoIdentifier {
  val jndiName = "main"
}

MongoDB.defineDb(MainDb, new Mongo, "test")

Mongo options:

Lift 3.x:

import com.mongodb.{MongoClient, MongoClientOptions}
import net.liftweb.mongodb.{DefaultMongoIdentifier, MongoDB}

val opts = MongoClientOptions.builder.connectTimeout(10).build
val client = new MongoClient("127.0.0.1:27017",opts)
MongoDB.defineDb(DefaultConnectionIdentifier, client, "test")

Lift 2.x:

import com.mongodb.{Mongo, MongoOptions, ServerAddress}
import net.liftweb.mongodb.{DefaultMongoIdentifier, MongoDB}

val srvr = new ServerAddress("127.0.0.1", 27017)
val mo = new MongoOptions
mo.socketTimeout = 10

MongoDB.defineDb(DefaultMongoIdentifier, new Mongo(srvr, mo), "test")

Authentication

Lift 3.x:

import com.mongodb.{MongoClient,MongoClientURI,MongoClientOptions}
import net.liftweb.util.DefaultConnectionIdentifier
import net.liftweb.mongodb.MongoDB

val opts = MongoClientOptions.builder.connectTimeout(10)
val clientUri = new MongoClientURI("mongodb://db_user:db_pwd@127.0.0.1:27017",opts)
val client = new MongoClient(clientUri)
MongoDB.defineDb(DefaultConnectionIdentifier, client, "test")

Lift 2.x:
import com.mongodb.Mongo
import net.liftweb.mongodb.{DefaultMongoIdentifier, MongoDB}

MongoDB.defineDbAuth(DefaultMongoIdentifier, new Mongo, "test", "db_user", "db_pwd")

Replica Sets

Lift 3.x:

TBC

Lift 2.x:
import com.mongodb.{Mongo, MongoOptions, ServerAddress}
import net.liftweb.mongodb.{DefaultMongoIdentifier, MongoDB}
import scala.collection.JavaConversions._

val srvr1 = new ServerAddress("127.0.0.1", 27017)
val srvr2 = new ServerAddress("127.0.0.1", 27018)
val srvr3 = new ServerAddress("127.0.0.1", 27019)
val srvrs = srvr1 :: srvr2 :: srvr3 :: Nil

MongoDB.defineDb(DefaultMongoIdentifier, new Mongo(srvrs), "test")

Initialization

You must initialize Mongo in Boot, but you can put your code anywhere you’d like. I put a MongoConfig object in the model package and call it’s init function from Boot.

myapp/model/MongoConfig.scala:

package myapp.model

import net.liftweb._
import mongodb._
import util.Props
import com.mongodb.MongoClient

object MongoConfig {
   def init: Unit = {
      val host = Props.get("mongo.host", "127.0.0.1")
      val port = Props.getInt("mongo.port", 27017)
      val db = Props.get("mongo.db", "default")
      val client = new MongoClient(host, port)
      MongoDB.defineDb(DefaultConnectionIdentifier, client, db)
   }
}

bootstrap/liftweb/Boot.scala

package bootstrap.liftweb

import net.liftweb._
import myapp.model.MongoConfig

class Boot {
  def boot: Unit = {
    // make sure you call this before trying to use any of your Mongo model classes.
    MongoConfig.init
  }
}

For more info see the api docs for the Mongo class

Note: If you look in the source code, you’ll see classes such as MongoAddress and MongoHost. These were created long ago, before ServerAddress existed. These are not really needed anymore, as you can now just pass in a Mongo instance to MongoDB.defineDb.