【发布时间】:2017-06-05 21:09:12
【问题描述】:
我们目前正在使用一种类型安全的查询语言,这种自定义 DSL 使我们能够轻松编写数据库查询,这些查询被解释并转换为 Mongo 查询。
我们最近从 Casbah 切换到新的 Mongo Scala 驱动程序并重写了我们的解释器。然而,我在处理可选值时遇到了一些问题。
这是一个示例查询:
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.
我不确定如何解决这个问题,或者我是否需要为 Options 实现自己的编解码器,如果我这样做,我不知道该怎么做。
任何帮助将不胜感激。 提前谢谢你
更新
我已经看到我可以尝试实现如下所示的编解码器接口:
http://mongodb.github.io/mongo-java-driver/3.0/bson/codecs/
我是否需要为每个可能的 Option 子类型实现它?
示例 Option[Int]、Option[UUID]、Option[List[String]] 等
【问题讨论】:
标签: mongodb scala codec bson casbah