如何在两个 MongoDB 数据库之间同步一些集合?

Posted

技术标签:

【中文标题】如何在两个 MongoDB 数据库之间同步一些集合?【英文标题】:How to sync some collections between two MongoDB databases? 【发布时间】:2019-12-10 16:57:10 【问题描述】:

我正在寻找一些方法在两个 MongoDB 数据库之间同步一些集合,例如将一些集合从本地数据库同步到生产数据库。如果我使用mongodumpmongorestore,只会将新文档添加到远程数据库中,因为mongorestore 不执行更新,因此不会更新现有文档。另一种方法是每次使用mongodump 输出删除并重新创建集合,但我想避免(如果可能)这种方法。那么是否可以在两个 MongoDB 数据库之间同步一个集合,而不必每次都重新创建集合?

【问题讨论】:

我不得不做类似的事情,我最终编写了一个应用程序来手动将数据库 A 中的所有项目复制到数据库 B。如果您使用所选驱动程序的 upsert 功能,您将能够在不先删除目标数据库的情况下脱身。 在进一步的搜索中,我看到了mongoimport comand 有 upsert 参数。因为我不需要同步整个数据库,而只需要一些集合,我可能需要使用它。使用这个命令会好还是有一些缺陷? 【参考方案1】:

我刚刚完成了工具 diffmongo https://github.com/datacoon/diffmongo,它生成 MongoDb 表之间的差异列表,并允许在不删除/恢复的情况下同步集合。 但它仍然可能会更慢,因为它会删除、附加和更新每个已删除、添加和更新的记录的更改。

【讨论】:

【参考方案2】:

config.yml 文件中有一个 mongo-sync 配置。这里有一个类似的问题:How to perform one-time DB sync to another DB in MongoDB?

看看这对你有没有帮助。

【讨论】:

该解决方案似乎在写入新数据之前删除了目标数据库。 我看过那个项目,但遗憾的是它不适合我的情况。首先是因为它在还原之前删除了目标数据库,其次是因为它不允许还原某些集合(我见过this issue,作者解释了为什么他不会添加这样的功能)

以上是关于如何在两个 MongoDB 数据库之间同步一些集合?的主要内容,如果未能解决你的问题,请参考以下文章

如何在两个集合之间建立查找连接

使用 Express 在 SQL Server 2008 R2 和 MongoDB 之间进行实时同步

MongoDB副本集同步原理解析

MongoDB - 查找两个集合之间的差异

需要 mongodb 查询来检查日期是不是在存储在集合文档中的两个日期之间[重复]

MongoDB副本集的组成