如何在两个 MongoDB 数据库之间同步一些集合?
Posted
技术标签:
【中文标题】如何在两个 MongoDB 数据库之间同步一些集合?【英文标题】:How to sync some collections between two MongoDB databases? 【发布时间】:2019-12-10 16:57:10 【问题描述】:我正在寻找一些方法在两个 MongoDB 数据库之间同步一些集合,例如将一些集合从本地数据库同步到生产数据库。如果我使用mongodump
和mongorestore
,只会将新文档添加到远程数据库中,因为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 之间进行实时同步