Version 1, last updated by eltimn at May 06, 2011 00:18 UTC
Mongo Record Embedded Objects
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