我需要一个工具来快速重新创建环境之间MongoDB示例的适当“模式”(例如它),该环境预先创建正确的DB名称,集合,设置集合上限,并为每个集合创建索引。但是,我不想在示例之间复制所有数据。我管理的每个环境都有不同的数据,但DB/collection/caps/indexes都是相同的。有没有一种简单的方法来做到这一点,最好是一个工具,导出所有名称,大写字母和索引的JSON文档,然后可以重新导入到一个新的示例?
ymdaylpp1#
我今天写了一些东西就是为了这个。导出只是使用API方法在选定数据库的集合上调用list_indexes()和options()。导入将创建数据库并使用索引和选项创建集合。https://github.com/JonnoFTW/mongo-schema-export它会生成一个文件,您可以使用该文件在另一个数据库上设置索引、上限和验证器。
list_indexes()
options()
2guxujil2#
有一次,我也遇到了同样的问题。我所做的是一组JS文件,我必须在每个env上手动运行(mongo可以评估脚本)。这些文件里面有数据,所以我必须小心管理它们,不要引入dups /损坏现有数据。但是,我发现迁移工具对这类任务非常有用。This one是我的最爱,但有manyothersolutions。把你的变化想象成一系列不可变的事件。例如:为了删除以前创建的索引,您创建了新的更改(迁移),这会删除它。您将该流作为一组文件存储在VCS中,因此新环境的设置非常简单(mm migrate和您的基础是最新的!)为项目中的新人提供。此外,当您使用容器或VM时,此方法非常有用:通常,您可以基于容器/ VM生命周期触发脚本,从而自动填充数据库,使重新启动/重新创建变得轻松。
mongo
mm migrate
2lpgd9683#
在我没有找到任何合适的工具之后,我转储了数据库并在没有数据的情况下恢复了它,所以元数据被恢复了(特别是所有的集合都是用合适的索引创建的),但是集合是空的。这也可以应用于有数据的数据库,因此如果没有冲突,将在现有数据库上创建索引。1.使用mongodump进行转储2.清空集合的数据find ./dump -name '*bson' -type f -exec cp /dev/null {} \;3.使用mongorestore将数据恢复到新数据库
mongodump
find ./dump -name '*bson' -type f -exec cp /dev/null {} \;
mongorestore
0mkxixxg4#
前面的所有答案都提到了一些变通方法,但是有一种导出索引的官方方法。正如在official MongoDB forum上所讨论的,使用--gzip标志将包括索引。完整命令示例:
--gzip
mongodump --uri mongodb+srv://${USER}:${PASSWORD}@cluster1.gfixz.gcp.mongodb.net/${YOUR_DATABASE_NAME} --collection=${YOUR_COLLECTION_NAME} --gzip
4条答案
按热度按时间ymdaylpp1#
我今天写了一些东西就是为了这个。导出只是使用API方法在选定数据库的集合上调用
list_indexes()
和options()
。导入将创建数据库并使用索引和选项创建集合。https://github.com/JonnoFTW/mongo-schema-export
它会生成一个文件,您可以使用该文件在另一个数据库上设置索引、上限和验证器。
2guxujil2#
有一次,我也遇到了同样的问题。我所做的是一组JS文件,我必须在每个env上手动运行(
mongo
可以评估脚本)。这些文件里面有数据,所以我必须小心管理它们,不要引入dups /损坏现有数据。但是,我发现迁移工具对这类任务非常有用。This one是我的最爱,但有manyothersolutions。
把你的变化想象成一系列不可变的事件。例如:为了删除以前创建的索引,您创建了新的更改(迁移),这会删除它。您将该流作为一组文件存储在VCS中,因此新环境的设置非常简单(
mm migrate
和您的基础是最新的!)为项目中的新人提供。此外,当您使用容器或VM时,此方法非常有用:通常,您可以基于容器/ VM生命周期触发脚本,从而自动填充数据库,使重新启动/重新创建变得轻松。2lpgd9683#
在我没有找到任何合适的工具之后,我转储了数据库并在没有数据的情况下恢复了它,所以元数据被恢复了(特别是所有的集合都是用合适的索引创建的),但是集合是空的。这也可以应用于有数据的数据库,因此如果没有冲突,将在现有数据库上创建索引。
1.使用
mongodump
进行转储2.清空集合的数据
find ./dump -name '*bson' -type f -exec cp /dev/null {} \;
3.使用
mongorestore
将数据恢复到新数据库0mkxixxg4#
前面的所有答案都提到了一些变通方法,但是有一种导出索引的官方方法。
正如在official MongoDB forum上所讨论的,使用
--gzip
标志将包括索引。完整命令示例: