我们目前在工作中使用一种类型安全的查询语言,这种自定义DSL使我们能够轻松编写被解释并转换为Mongo查询的数据库查询。
最近我们从Casbah转换到了新的Mongo Scala Driver,并重写了我们的解释器。然而,在处理可选值时我遇到了一些问题。
以下是一个示例查询:
dao.headOption(Order.id === orderId.some)
订单对象存储的类型是一个选项,因此我们也将提供的 ID 提升为选项。但是,每当我尝试以以下方式呈现生成的查询以进行调试以及测试用例时:
import org.mongodb.scala.bson.{BsonDocument, codecs}
query.toBsonDocument(BsonDocument.getClass, codecs.DEFAULT_CODEC_REGISTRY)
以下异常最终被抛出:
Can't find a codec for class scala.Some.
org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class scala.Some.
我不确定如何纠正这个问题,或者是否需要为选项实现自己的编解码器,如果需要,我也不知道该如何实现。
非常感谢任何帮助。提前致谢。
更新
我已经看到可以尝试实现编解码器接口,如此处所示:
http://mongodb.github.io/mongo-java-driver/3.0/bson/codecs/
我需要为每个可能的Option子类型都实现它吗?
例如Option[Int],Option[UUID],Option[List[String]]等。