不持久化 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))