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

Mongodb 添加新字段后,ReactiveMongo Macros.handler崩溃,mongodb,scala,reactivemongo,play-reactivemongo,Mongodb,Scala,Reactivemongo,Play Reactivemongo,我最近在scala case类中添加了一个新字段,因为我想在MongoDB中跟踪该字段 假设案例类是这样的: case class MyItem ( var existingField: String, var newlyAddedField: String ) { } 我使用它将json和bson序列化/反序列化到我的对象: object MyItem { import play.api.libs.json.Json // generate reader and wr

我最近在scala case类中添加了一个新字段,因为我想在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


提前谢谢

AFAIU it
Macros.handler
null
安全的,即如果没有字段,它不会将值设置为
null
。我认为Scala中最简单、最干净的修复方法是将新字段声明为
Option[String]
,这样每个人(包括宏代码生成器)都会看到该字段可能不存在。这似乎也是它
宏的原因。处理程序
null
-安全的,即如果没有字段,它不会将值设置为
null
。我认为Scala中最简单、最干净的修复方法是将新字段声明为
Option[String]
,这样每个人(包括宏代码生成器)都会看到该字段可能不存在。这似乎也是贝娄所说的

,如果
新添加的字段
可能缺失,它必须表示为
选项
,而不是
,这不是特定于ReactiveMongo的。正如贝娄所说的,如果
新添加的字段
可能缺失,它必须表示为
选项
,而不是
,这不是特定于ReactiveMongo的。