添加新字段后,ReactiveMongo Macros.handler崩溃

时间:2017-12-17 05:08:29

标签: mongodb scala reactivemongo play-reactivemongo

我最近在我的scala案例类中添加了一个新字段,因为我想开始在MongoDB中跟踪该字段。

让我们说案例类是这样的:

case class MyItem (
  var existingField: String,
  var newlyAddedField: String
) {

}

我用它来序列化/反序列化json和bson到我的对象:

object MyItem {
   import play.api.libs.json.Json

   // generate reader and writer:
   implicit var jsonFormats = Json.format[MyItem]
   implicit var bsonFormats = Macros.handler[MyItem]
}

由于我的数据库中的所有现有数据都没有newlyAddedField,因此我得到运行时异常

reactivemongo.bson.exceptions.DocumentKeyNotFound: The key 'newlyAddedField' could not be found in this document or array

有人可以帮忙吗?我已经阅读了关于编写自己的序列化/反序列化的内容,但我不知道如何做到这一点,因为我正在使用Play Framework,其语法和方法在其版本中都有所不同。我希望有一种更简单的方法,因为在NoSQL db中添加字段应该是常见的。顺便说一下,我正在使用play framework 2.5

提前致谢!

1 个答案:

答案 0 :(得分:1)

AFAIU Macros.handlernull - 安全,即如果没有字段,则不会将值设置为null。我认为在Scala中最简单和最干净的解决方法是将您的新字段声明为Option[String],这样每个人(包括宏代码生成器)都会看到该字段可能不存在。这似乎也是the doc suggests以及