问题标签 [mongock]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - MongoCK:如何在不同系统版本之间即时导入和迁移 mongoDB 数据?
我有 2 个 Java 服务器实例与 MongoDB 数据库一起在 docker 中运行。我们使用 mongock 来迁移运行良好的 MongoDB 数据。我开发了一项功能,用户可以从一个实例从 MongoDB 导出特定数据,并可以导入另一个实例。当上述实例不在同一版本上时,就会出现问题,
- 源实例版本大于目标实例:无法导入-导出,因为源实例可能具有尚未引入目标实例的增强功能
- 源实例低于目标实例:此导入的数据应自动迁移到最新版本,以便目标实例可以理解它
我正在寻找专门解决第二个案例。我试图寻找这种特定的用例,但找不到任何相关的例子。
java - 如何使用 Mongock 处理降级操作?
我有一个关于与 Mongock 一起执行降级的问题。我得到了与 mongock 集成的 Java Spring 应用程序,假设我将应用程序从 v1 升级到 v2。在升级迁移脚本“001”期间执行并迁移数据,因此我可以在“mongockChangeLog”集合中看到新条目。
一天后,客户说存在严重错误并希望将应用程序降级到 v1。问题是客户端添加了一些具有新“类型”的“设备”(在 v2 中支持),这在 v1 中当然不支持。现在,在降级期间,我想删除具有新“类型”的条目,但我不知道该怎么做。我看到 mongock 支持带有注释“RollbackExecution”的方法,但正如我从文档中了解到的那样,它将在不同的场景中被触发。
你有什么想法我应该在哪里放置将删除所有具有新类型的设备的回滚逻辑?
更进一步 - 在降级期间 - 在这种情况下,我应该从“mongockChangeLog”中删除条目还是有更好的解决方案?
java - Mongock 数据分区
我正在尝试使用 mongock 迁移 MongoDB 中的数据,当我需要跨大量数据运行迁移时偶然发现了一个问题。
有没有办法以任何方式对这些数据进行分区?我没有在文档中找到对此的支持。
问题是对这些数据进行查询并一次将所有数据加载到内存中需要花费大量时间,这也会导致问题。
UPD:问题是示例代码可以带来 1 或 1kk 文档,并且可能需要大量时间
mongodb - 如何使用多个属性/生命周期方法测试 mongock 中的更改单元?
我们最近从 MongoBee 迁移到了 Mongock,并在 Mongock 5 版本中弃用了@ChangeLog
和@ChangeSet
。编写@ChangeUnit
很容易,回滚方法非常有用。
但是,我无法弄清楚如何编写一个测试来模拟测试数据库中的迁移并验证数据库中的更改,因为@ChangeUnit 中有、@BeforeExecution
和属性或生命周期方法。@RollbackBeforeExecution
@Execution
@RollbackExecution
早些时候,我曾经只是调用带有@ChangeSet
注释的方法,例如
现在,我不确定是否有一种干净的方法来编写上述测试,@BeforeExecution
因为@Execution
. 我知道单独调用带注释的方法会起作用,但我想知道是否有一种方法可以将@ChangeUnit
一个整体运行。
spring-boot - 关于重置 Mongock 变更集的建议
我们在 spring-boot/kotlin 微服务中使用 Mongock 作为主要的 Mongo DB 迁移工具,它运行良好。我们从一个简单的 json 文件开始创建一些集合,并且已经添加了一段时间的变更集。
到目前为止,我们有如此多的变更集,以至于很难看出我们数据库的“真相”是什么。我们没有一个单独的 json 文件或一堆文件来告诉我们数据库的状态是什么,它是 start json 和所有变更集的累积。
我想根据当前情况创建一个新的基线脚本并重新开始。实现这一目标的最佳实践是什么?当然不会丢失数据等。
mongodb - MongoDB:按日期字段搜索并按条件更新
请告诉我如何满足以下条件 - 如果 info.startDate 字段中的时间不等于 00 小时,则将日期(2021-05-27)提前 1 天,将时间设置为 00:00: 00.000Z。我试图通过 Mongock 笨拙地完成它,获取集合的所有元素并通过 LocalDateTime 进行检查,但是我的堆溢出,这是合乎逻辑的,因为集合很大。我如何通过 Mongock 或至少手动请求 MongoDB 来做到这一点。到目前为止,我只写了这个:
我想使用 dateToString 按小时进行部分搜索,但据我了解,此功能只能在聚合中使用。
我会很感激你的帮助:)