我想構建一個將Scala案例類轉換爲Mongo文檔的通用方法。如何將Scala案例類轉換爲mongo文件
一個有前途的Document constructor是
fromSeq(ts: Seq[(String, BsonValue)]): Document
我可以把一個案例類到地圖[字符串 - >任何],但後來我失去了我需要使用隱式轉換爲BsonValues類型的信息。也許類型標籤可以幫助這個?
這是我已經試過:
import org.mongodb.scala.bson.BsonTransformer
import org.mongodb.scala.bson.collection.immutable.Document
import org.mongodb.scala.bson.BsonValue
case class Person(age: Int, name: String)
//transform scala values into BsonValues
def transform[T](v: T)(implicit transformer: BsonTransformer[T]): BsonValue = transformer(v)
// turn any case class into a Map[String, Any]
def caseClassToMap(cc: Product) = {
val values = cc.productIterator
cc.getClass.getDeclaredFields.map(_.getName -> values.next).toMap
}
// transform a Person into a Document
def personToDocument(person: Person): Document = {
val map = caseClassToMap(person)
val bsonValues = map.toSeq.map { case (key, value) =>
(key, transform(value))
}
Document.fromSeq(bsonValues)
}
<console>:24: error: No bson implicit transformer found for type Any. Implement or import an implicit BsonTransformer for this type.
(key, transform(value))
太差勁了作爲一個實際的解決方案。我可以想象只有當我按小時付款時才能這樣做。 –