2015-11-28 66 views
3

我是新來的scala mongo驅動程序,並試圖瞭解如何映射文檔中的類?沒有任何文件似乎表明這是如何完成的。在.net驅動程序中,它像傳遞一個泛型並且具有自動映射的字段一樣簡單。 scala中沒有類似的東西嗎?使用scala mongo驅動程序序列化爲對象?

回答

1

它們並不容易。通過java挖掘,我想出了這個解決方案:

import org.bson.codecs.DecoderContext 
import org.bson.codecs.configuration.CodecRegistries.{fromProviders, fromRegistries} 
import org.bson.codecs.configuration.CodecRegistry 
import org.bson.{BsonDocumentReader, BsonDocumentWrapper} 
import org.mongodb.scala.bson.codecs.{DEFAULT_CODEC_REGISTRY, Macros} 
import org.mongodb.scala.bson.collection.mutable.Document 

import scala.reflect.classTag 

case class Person(firstName: String, lastName: String) 

object MongoTest extends App { 

    val personCodecProvider = Macros.createCodecProvider[Person]() 
    val codecRegistry: CodecRegistry = fromRegistries(fromProviders(personCodecProvider), DEFAULT_CODEC_REGISTRY) 

    val document = Document("firstName" -> "first", "lastName" -> "last") 
    val bsonDocument = BsonDocumentWrapper.asBsonDocument(document, DEFAULT_CODEC_REGISTRY) 

    val bsonReader = new BsonDocumentReader(bsonDocument) 
    val decoderContext = DecoderContext.builder.build 
    val codec = codecRegistry.get(classTag[Person].runtimeClass) 
    val person: Person = codec.decode(bsonReader, decoderContext).asInstanceOf[Person] 

    println(s"person: $person") 
} 
相關問題