gpt4 book ai didi

reactivemongo - 无论结构如何,使用响应式(Reactive)mongo从mongodb读取数据的方法

转载 作者:行者123 更新时间:2023-12-02 03:43:08 25 4
gpt4 key购买 nike

我正在使用 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
}

我想保留当前使用旧结构(即“name”作为字符串)的数据并使用新结构(即“name”作为 BSONDocument)插入新数据。

在读取具有旧结构的文档时会抛出异常“None.get”,因为根据读取方法“name”应该是一个 BSONDocument。

我应该采用什么方法来处理这个问题?

最佳答案

这是一个典型的迁移问题。有几种方法可以处理迁移。典型的解决方案是:

  1. 迁移数据库中的所有现有文档以适应您的新格式(使用 mongo shell、脚本或者您甚至可以在启动时将其包含在您的应用程序中。)。目前没有适用于 mongo 的“自动迁移”插件可以为您完成这项工作(我正在开发一个,但尚未完成)。

  2. 让您的应用程序代码了解不同的架构版本。这意味着以接受两个版本的方式编写 BSONDocument 解析逻辑。

关于reactivemongo - 无论结构如何,使用响应式(Reactive)mongo从mongodb读取数据的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18911110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com