我注意到scala驱动程序(版本1.2.1)将None的Option值作为null写入相应的字段。在这种情况下,我宁愿完全省略fieid。这可能吗?
示例
case class Test(foo: Option[String])
persist(Test(None))
导致
> db.test.find()
{ "_id": "...", "foo": null }
但我想实现
> db.test.find()
{ "_id": "..." }
当我使用casbah时,我认为我的预期行为是默认行为。
答案 0 :(得分:2)
http://mongodb.github.io/mongo-scala-driver/2.4/bson/macros/
现在您可以使用宏了:
val testCodec = Macros.createCodecProviderIgnoreNone[Test]()
并在编解码器conf中:
lazy val codecRegistry: CodecRegistry = fromRegistries(fromProviders(testCodec))
答案 1 :(得分:1)
在mongodb bug跟踪器(https://jira.mongodb.org/browse/SCALA-294)中打开了一个功能请求,Ross Lawley回答了这个请求。他建议从
更改转换代码(从案例类到文档)def toDocument(t: Test) = Document("foo" -> t.foo)
类似
def toDocument(t: Test) = {
val d = Document()
t.foo.foreach{ value =>
d + ("foo" -> value)
}
d
}