MongoDB导入/导出索引

per*_*o93 14 mongodb

我需要一个工具,用于在预先创建正确的数据库名称,集合,设置集合上限的环境之间快速重新创建MongoDB实例的正确"模式"(例如它),并为每个集合创建索引.不过,我不想复制实例之间的所有数据.我管理的每个env都有不同的数据,但DB/collection/caps/index都是相同的.有没有一种简单的方法可以做到这一点,最好是一个导出所有名称,大写和索引的JSON doc的工具,然后可以将其重新导入到新实例中?

Jon*_*FTW 7

我今天就为此写了一些东西。导出仅使用 API 方法来调用list_indexes()options()选定数据库的集合。导入将创建数据库并使用索引和选项创建集合。

https://github.com/JonnoFTW/mongo-schema-export

它生成一个文件,您可以使用该文件在另一个数据库上设置索引、上限和验证器。


mad*_*ead 5

有一次,我也遇到了同样的问题。我所做的是一组 JS 文件,我必须在每个环境上手动运行它们(mongo可以评估脚本)。这些文件里面有数据,所以我必须仔细管理它们,不要引入重复/损坏现有数据。

但后来,我发现迁移工具对于此类任务非常有帮助。是我最喜欢的,但还有很多 其他 解决方案

将您的变化视为不可变事件流。例如:为了删除以前创建的索引,您创建新的更改(迁移),这会删​​除它。您将该流作为一组文件存储在您的 VCS 中,因此对于项目的新手来说,新环境的设置非常简单(mm migrate并且您的基础是最新的!)。此外,当您使用容器或虚拟机时,这种方法非常有用:通常,您可以根据容器/虚拟机生命周期触发脚本,从而自动填充数据库,从而使重新启动/重新创建变得轻松。

  • 我不确定我是否了解这些迁移工具的工作原理。我正在寻找的是这样的: ` mongoexport --indexes --caps -db MyDB -o MyDB.json localhost:27017 mongoimport --indexes -caps -db MyDB -i MyDB.json localhost:27017 ` 有什么东西吗那里有这个功能吗?如果没有,我可以尝试用 python 和 PyMongo 编写它,但我宁愿使用现成的东西来节省时间。 (2认同)

Men*_*nua 5

在我没有找到任何合适的工具后,我转储了数据库并在没有数据的情况下恢复了它,因此恢复了元数据(特别是所有集合都使用适当的索引创建),但集合是空的。这也可以应用于有数据的数据库,因此如果没有冲突,将在现有数据库上创建索引。

1.做一个转储 mongodump

2.清空集合的数据

find ./dump -name '*bson' -type f -exec cp /dev/null {} \;

3.将数据恢复到新数据库 mongorestore

  • 据我记得 mongorestore 需要这些文件的存在,所以你不能简单地删除它们 (2认同)