不持久化 Scala None 而不是持久化为空值
Not persisting Scala None's instead of persisting as null value
我注意到 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 时,我认为我的预期行为是默认行为。
在 mongodb 错误跟踪器 (https://jira.mongodb.org/browse/SCALA-294) 中打开了一个功能请求,Ross Lawley 对此进行了答复。他建议将转换代码(从 case class 更改为 document)从
def toDocument(t: Test) = Document("foo" -> t.foo)
类似于
def toDocument(t: Test) = {
val d = Document()
t.foo.foreach{ value =>
d + ("foo" -> value)
}
d
}
http://mongodb.github.io/mongo-scala-driver/2.4/bson/macros/
现在可以使用宏了:
val testCodec = Macros.createCodecProviderIgnoreNone[Test]()
在编解码器配置文件中:
lazy val codecRegistry: CodecRegistry = fromRegistries(fromProviders(testCodec))
我注意到 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 时,我认为我的预期行为是默认行为。
在 mongodb 错误跟踪器 (https://jira.mongodb.org/browse/SCALA-294) 中打开了一个功能请求,Ross Lawley 对此进行了答复。他建议将转换代码(从 case class 更改为 document)从
def toDocument(t: Test) = Document("foo" -> t.foo)
类似于
def toDocument(t: Test) = {
val d = Document()
t.foo.foreach{ value =>
d + ("foo" -> value)
}
d
}
http://mongodb.github.io/mongo-scala-driver/2.4/bson/macros/
现在可以使用宏了:
val testCodec = Macros.createCodecProviderIgnoreNone[Test]()
在编解码器配置文件中:
lazy val codecRegistry: CodecRegistry = fromRegistries(fromProviders(testCodec))