【问题标题】:MongoDB import/export indexesMongoDB 导入/导出索引
【发布时间】:2015-09-16 04:26:57
【问题描述】:

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

【问题讨论】:

  • 您只需要导入索引和上限设置。数据库和集合在首次使用时会隐式创建。
  • 对,我所有的收藏都有上限,所以我希望在添加任何数据之前对其进行上限和创建。

标签: mongodb


【解决方案1】:

曾经,我也有同样的问题。我所做的是一组 JS 文件,我必须在每个 env 上手动运行这些文件(mongo 可以评估脚本)。这些文件里面有数据,所以我必须小心管理它们,以免引入重复/损坏现有数据。

但是,我发现迁移工具对此类任务非常有用。 This one是我最喜欢的,但也有manyothersolutions

想想你随着不可变事件流的变化而变化。例如:为了删除以前创建的索引,您创建新的更改(迁移),然后删除它。您将该流作为一组文件存储在您的 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】:

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

1.使用mongodump进行转储

2.清空集合的数据

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

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

【讨论】:

  • 为什么cp /dev/null {},不是更好rm {}
  • 据我所知 mongorestore 需要存在该文件,因此您不能简单地删除它们
  • so 2. 是“通过将文件替换为空文件来清空集合的数据”
【解决方案3】:

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

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

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

【讨论】:

    猜你喜欢
    • 2019-08-05
    • 2013-03-18
    • 2016-03-08
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 2015-11-21
    • 2018-11-29
    • 1970-01-01
    相关资源
    最近更新 更多