我们有一个开发服务器,它包含一组对象.
这些对象的实际累积是一个持续的过程,它在本地开发服务器上运行标记,验证等的整个过程.
一旦这些对象准备好生产,它们就会被添加到生产数据库中,从那时起,它将在计算中使用它们.
我正在寻找一种方法来简单地将delta(新对象)添加到生产数据库中,同时保留所有其他集合以及同一集合中的旧对象.
到目前为止,我们已经使用了MySql,因此这个过程只涉及运行数据库结构和数据同步(我们使用Navicat).
我们现在转移到MongoDB,所以这个过程有点棘手.
我已经研究过了,我认为以下解决方案不符合我的需求:
>转储dev DB并使用mongodump
then mongorestore
将其加载到Production DB中
>运行db.copyDatabase – 实际上用dev DB的副本替换生产数据库.
这两种解决方案都存在问题,因为它们实际上取代了生产数据库,而我想要做的就是更新现有集合中的对象.
另外,去Dev =>生产不适合主从拓扑.
我能想到的最好的事情是:
>将dev DB复制到生产实例上的“dev”DB中.
>将集合从此dev DB复制到实际生产数据库,并添加一个谓词,我将只添加生产数据库中不存在的对象,类似于this solution.
我想知道是否有人有更好的解决方案?
如果没有,是否有人有脚本可以执行此操作?
最佳答案 您可以使用
mongoexport工具从开发数据库中导出单个集合.将它与–query选项结合使用,您可以在其中表达谓词.例如${ts:{$gt:previous clone time}}之类的内容.
然后,使用mongoimport将delta文件导入生产数据库.如果您有两个具有不同_id值的不同逻辑文档,但表达相同的文档,请使用–upsert和–upsertFields