我们有一个包含对象集合的开发服务器。
这些对象的实际积累是一个持续的过程,该过程在此本地dev服务器上运行标记,验证等整个过程。
一旦这些对象准备好用于生产,就将它们添加到生产数据库,从那时起,它将在计算中使用它们。

我正在寻找一种将增量(新对象)简单地添加到生产数据库中,同时保留所有其他集合和旧对象在同一集合中的方法。
到目前为止,我们一直使用MySql,因此此过程仅涉及运行数据库结构和数据同步(为此,我们使用了Navicat)。
我们现在正在迁移到MongoDB,因此此过程有些棘手。

我对此进行了调查,我认为以下解决方案不符合我的需求:

  • 转储开发数据库并将其使用 mongodump then mongorestore 加载到生产数据库中
  • 运行db.copyDatabase-实际上将生产数据库替换为dev数据库的副本。

  • 这两种解决方案都是有问题的,因为当我想要做的就是更新现有集合中的对象时,它们实际上替代了生产数据库。
    同样,进行开发=>生产不适合主从拓扑。

    我能想到的最好的事情是:
  • 将dev DB复制到生产实例上的“dev” DB中。
  • 将集合从该开发数据库复制到实际的生产数据库,并添加一个谓词,即我只会添加生产数据库中不存在的对象,类似于this solution

  • 我想知道是否有人有更好的解决方案?

    如果没有,是否有人拥有可以执行此操作的脚本?

    最佳答案

    您可以使用mongoexport工具从开发数据库中导出单个集合。与--query选项结合使用,可以在其中表达谓词。例如${ts : {$gt : previous clone time}}之类的东西。

    然后,使用mongoimport将增量文件导入生产数据库。如果您有两个具有不同--upsert值的不同逻辑文档,但表示相同的文档,请使用--upsertFields_id

    关于MongoDB同步开发和生产数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17998101/

    10-13 08:45
    查看更多