Search code examples
scalamongodbimmutabilitymongo-scala-driver

Scala + MongoDB: optional fields and immutables


I have this domain object:

case class Person (
  name : String,
  age: Option[Int],
  email : String
) extends MongoObject

with the age optional field. So I defined my factory:

object Person extends MongoObjectShape[Person] {
  lazy val name = Field.scalar("name", _.name)
  lazy val age = Field.optional("age", t => t.age)
  lazy val email = Field.scalar("email", _.email)

  override lazy val * = name :: age :: email :: Nil
  override def factory(dbo: DBObject): Option[Person] = 
    for {
      n <- name from dbo
      t <- age from dbo
      z <- email from dbo
    } yield new Person(n, t, z)
}

but it does not compile, since I get:

[error]  found   : Int
[error]  required: Option[Int]
[error]     } yield new Person(n, t, z)
[error]                           ^

What is wrong with this?


Solution

  • maybe, you could write

    override def factory(dbo: DBObject): Option[Person] = 
        for {
          n <- name from dbo
          z <- email from dbo
        } yield new Person(n, age from dbo, z)