Re: Scala Mongo driver - Convert a Document to a case class

From: Ross Lawley <ross@xxxxxxxxxxx>
To: mongodb-user <mongodb-user@xxxxxxxxxxxxxxxx>
Date: Tue, 19 Apr 2016 01:49:05 -0700 (PDT)
Why ads?
Hi Sofiane,

BsonArray has a getValues() method which will return a Java list of 
BsonValues. So you can do:

  import scala.collection.JavaConverters._
  def asEntry: Option[Entry] = {
      for {
        x <- doc.get[BsonString]("id") map (_.asString().getValue)
        y <- 
doc.get[BsonArray]("values").map(_.getValues.asScala.flatMap(bv => 
asSubEntry(bv.asDocument))).toSeq
      } yield Entry(x, y)
    }

All the best,

Ross


On Thursday, March 31, 2016 at 7:40:49 AM UTC+1, Sofiane Cherchalli wrote:

Any taker?

On Tuesday, March 29, 2016 at 8:51:45 PM UTC+2, Sofiane Cherchalli wrote:

Hi,

I want to convert a org.mongodb.scala.bson.collection.immutable.Document 
to the following case class:

case class Entry(id: String, values: Seq[SubEntry])
case class SubEntry(code: String, value:)

I am unable to figure out how to convert the sequence to the case class.

Here is my attempt with implicit class:

object Helpers {
  implicit class DocumentAs(doc: Document) {
    def asSubEntry: Option[SubEntry] = {
      for {
        x <- doc.get[BsonString]("code") map (_.asString().getValue)
        y <- doc.get[BsonInt64]("value") map (_.asInt64().getValue)
      } yield SubEntry(x, y)
    }

    def asEntry: Option[Entry] = {
      for {
        x <- doc.get[BsonString]("id") map (_.asString().getValue)
        y <- doc.get[BsonArray]("values") map (_.asArray ???)
      } yield Entry(x, y)
    }
  }
}

def findEntry(id: String): Future[Option[Entry]] = {
  val col: MongoCollection[Document] = mongo.db.getCollection("mycol")
  for {
    doc <- col.find(equal("id", id)).head()
    entry <- doc.asEntry
  } yield Some(entry)
}

Any hints on how to convert the BsonArray to a Seq[SubEntry] ?

Thanks



-- 
You received this message because you are subscribed to the Google Groups "mongodb-user"
group.

For other MongoDB technical support options, see: https://docs.mongodb.org/manual/support/
--- 
You received this message because you are subscribed to the Google Groups "mongodb-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email to mongodb-user+unsubscribe@xxxxxxxxxxxxxxxx.
To post to this group, send email to mongodb-user@xxxxxxxxxxxxxxxx.
Visit this group at https://groups.google.com/group/mongodb-user.
To view this discussion on the web visit https://groups.google.com/d/msgid/mongodb-user/32ab631c-c731-4e35-8269-2bd8fa1a4b56%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Why ads?