我正在使用reactivemongo。
从 mongodb 读取文档时,我编写了特定于结构的代码。
结构
{
"name" : "test",
"age" : 3
}
为了阅读本文,我使用如下代码:
val cursor = collection.find(query).cursor[BSONDocument]
cursor.enumerate.apply(Iteratee.foreach { doc =>
var name: BSONDocument = doc.getAs[String]("name").get
var age: BSONDocument = doc.getAs[Int]("age").get
}
所以现在,如果以后,BSON 结构会发生如下变化:
{
"name" : {
firstName : "fname",
lastName : "lname"
},
"age" : 3
}
所以现在我必须更改我的代码才能阅读它
val cursor = collection.find(query).cursor[BSONDocument]
cursor.enumerate.apply(Iteratee.foreach { doc =>
var name: BSONDocument = doc.getAs[BSONDocument]("name").get
var fname : String = name.getAs[String]("firstName").get
var lname : String = name.getAs[String]("lastName").get
var age: BSONDocument = doc.getAs[Int]("age").get
}
我想保留当前使用旧结构(即“名称”作为字符串)的数据,并使用新结构(即“名称”作为 BSONDocument)插入新数据。
在读取具有旧结构的文档时,会引发异常“None.get”,因为根据读取方法“名称”应该是 BSONDocument。
我应该如何处理这个问题?