Version 1, last updated by eltimn at May 06, 2011 00:18 UTC

BsonRecord

As of version 2.4-M1 BsonRecords are supported as embedded objects via the BsonRecordField and BsonRecordListField.

BsonRecord Example

import net.liftweb.mongodb.record._
import net.liftweb.mongodb.record.field_
import net.liftweb.record.field._

class Address private () extends BsonRecord[Address] {
  def meta = Address

  object street extends StringField(this, 100)
  object city extends StringField(this, 100)
}
object Address extends Address with BsonMetaRecord[Address]

class Person private () extends MongoRecord[Person] with ObjectIdPk[Person] {
  def meta = Person

  object homeAddress extends BsonRecordField(this, Address)
  object otherAddresses extends BsonRecordListField(this, Address)
}
object Person extends Person with MongoMetaRecord[Person]

val home = Address.createRecord.street("123 4th Ave S").city("Minneapolis")
val firstAve = Address.createRecord.street("701 1st Ave N").city("Minneapolis")
val targetField = Address.createRecord.street("1 Twins Way").city("Minneapolis")

val p = Person.createRecord
  .homeAddress(home)
  .otherAddresses(firstAve :: targetField :: Nil)
  .save

JsonObject

JsonObjects can be embedded using JsonObjectField and MongoJsonObjectListField. These both rely on JObjectParser and so you must add the necessary CustomSerializers to your record’s formats. See JObjectParser and CustomSerializers for more info.

import net.liftweb.mongodb.record._
import net.liftweb.mongodb.record.field_
import net.liftweb.record.field._

case class Address(street: String, city: String) extends JsonObject[Address] {
  def meta = Address
}
object Address extends JsonObjectMeta[Address]

class Person private () extends MongoRecord[Person] with ObjectIdPk[Person] {
  def meta = Person

  object homeAddress extends JsonObjectField(this, Address) {
    def defaultValue = null.asInstanceOf[Address]
  }
  object otherAddresses extends MongoJsonObjectListField(this, Address)
}
object Person extends Person with MongoMetaRecord[Person] {
  override def formats = super.formats + new ObjectIdSerializer
}

val home = Address("123 4th Ave S", "Minneapolis")
val firstAve = Address("701 1st Ave N", "Minneapolis")
val targetField = Address("1 Twins Way", "Minneapolis")

val p = Person.createRecord
  .homeAddress(home)
  .otherAddresses(firstAve :: targetField :: Nil)
  .save