当前位置: 首页 > 知识库问答 >
问题:

MongoDB同步开发和生产数据库

廉鸿运
2023-03-14

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

我正在寻找一种简单地将增量(新对象)添加到生产数据库中的方法,同时将所有其他集合和旧对象保留在同一个集合中。到目前为止,我们一直使用MySql,所以这个过程只涉及运行数据库结构和数据同步(我们使用Navicat)。我们现在要转移到MongoDB,所以这个过程有点复杂。

我已经对此进行了研究,我认为以下解决方案不适合我的需要:

  1. 使用mongodump转储开发数据库并将其加载到生产数据库中,然后使用mongorestore
  2. 运行<代码>db。copyDatabase实际上用开发数据库的副本替换了生产数据库

这两种解决方案都有问题,因为它们实际上取代了生产数据库,而我只想更新现有集合中的对象。还有,Dev=

我能想到的最好的办法就是:

  1. 将开发数据库复制到生产实例上的“开发”数据库中
  2. 将集合从这个开发数据库复制到实际的生产数据库,并添加一个谓词,我将只添加生产数据库中不存在的对象,类似于此解决方案

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

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

共有3个答案

谯嘉懿
2023-03-14

这是我为自己编写的一个脚本,当时我不得不不断地将我的本地MongoDB数据库复制到我的生产数据库中,并从中复制到项目中(我知道这很愚蠢)。

数据库详细信息放入config.yml后,您可以使用两个简单的命令开始同步:

./mongo-sync push       # Push DB to Remote
./mongo-sync pull       # Pull DB to Local

如果您在某个项目中使用它,最好将config.yml添加到. gitignore

殷宇
2023-03-14

@Orid,谢谢你的回答,很抱歉回复太晚。

经过大量研究和一些尝试性错误,我决定使用问题中所述的解决方案(将测试数据库复制到机器上,然后逐个复制集合)。这是因为我在这里使用的数据是静态数据,没有真正的理由有时间戳。此外,我决定放弃“仅更新”的要求,因此目前我正在使用mongorestore和drop

我用这个脚本完成了所有这些:

  1. 外壳脚本文件:

<代码>rm-射频转储/

mongo copyTestDb.js;

for COLLECTION in <Collections>
do
mongodump -d nutrino_copy -c $COLLECTION -o dump
mongorestore -d nutrino -c ${COLLECTION} --drop dump/nutrino_copy/${COLLECTION}.bson
done

>

  • js脚本文件:

    <代码>db。复制数据库(“

    你认为我应该使用Mongo导入而不是MongoRestore吗?

  • 聂奇
    2023-03-14

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

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

     类似资料:
    • 问题内容: 我有一个相当大的SQL Server 2005数据库,该数据库正在不断开发中。每隔一段时间,我要么找一个新的开发人员,要么需要将大规模的架构更改部署到生产服务器。 我主要关心的是从“主”开发副本向开发人员计算机部署架构+数据更新。 是否有一些内置功能或工具以这种方式发布架构+数据?我希望它花费尽可能少的时间。可以从SSMS内完成吗? 在此先感谢您的时间 问题答案: 我建议使用可以部署架

    • input { mongodb { uri => 'mongodb://web:l8ka65##1@10.112.5.11:32222/who_aa_cen' placeholder_db_dir => "/tmp/logstash-mongodb/who_log" placeholder_db_name => "who_aa_cen" collection

    • 问题内容: 我有一个GlassFish / j2ee应用程序,我在一个盒子上进行开发,而生产是一个远程盒子。我有一个制作文件的功能,根据我的开发箱或生产环境,我需要文件的位置不同。什么是自动切换方式,所以我不必根据部署源文件来编辑源文件? 问题答案: 最简单的方法是定义一个系统属性,该属性指定数据的文件系统位置。生产应用服务器将定义一个值(在启动脚本中使用),而开发应用服务器将定义另一个值。您的应

    • 例如当前数据结构是:{ "name": "mike" } 业务迭代后变成了:{ "name": "mike", "age" : 20 } 那么如何将前者也都变成例如:{ "name": "mike", "age" : 0 } 来实现类似关系型数据库的效果?还是说做不到只能用回关系型数据库

    • 在本地电脑上可以搭建一套学习与开发网站的运行环境。有很多一键安装的集成环境,比如 Windows 上的 WAMP ,macOS 上的 MAMP。这些集成环境可以让你快速开始,但是不够灵活,也存在很多问题。更重要的是我们并没学到什么,我推荐可以先在本地用虚拟机的方式去手工搭建一个 LEMP 环境。 本书会利用 Vagrant 管理虚拟机,创建一台 Linux 类型的虚拟机,在上面手工去安装并配置环境

    • 本文向大家介绍MongoDB开源数据库开发工具dbKoda,包括了MongoDB开源数据库开发工具dbKoda的使用技巧和注意事项,需要的朋友参考一下 Southbank Software公司最近发布了 dbKoda 0.6.0 ,这是该软件的 首个发布版 。dbKoda是一款开源的 MongoDB 开发工具,采用JavaScript、 React 和 Electron 开发。下图显示了dbKod