【问题标题】:Migrate mongodb collections and indexes excluding data迁移 mongodb 集合和索引,不包括数据
【发布时间】:2015-08-28 23:00:31
【问题描述】:

我有两个环境 DEV 和 STAGE,我需要将我的collections 全部从 DEV 数据库转移到 STAGE 中的数据库。

目前使用 mongodump 来获取我所有的集合和索引,这似乎工作得很好。

>mongodump --host 192.168.#.# --port 27019 --db MyDB

然后我使用 mongorestore 用适当的集合和索引填充 STAGE。

>mongorestore --host 192.168.#.# --port 27019 --db test "C:\Program Files\MongoDB 2.6 Standard\bin\dump\MyDB"

我的收藏和索引完美呈现,但是,我的收藏内容也随之而来。我还没有找到一种方法来排除我的收藏中的实际数据……这可行吗?我可以从 mongodump 的输出中删除文件,只保留我的 collections 及其“索引”吗?

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    MongoDB 是无模式的,因此基本上没有必要恢复空集合。集合是在您进行写入时动态创建的。

    我了解您只想将集合的元数据恢复为索引等,我不知道您使用的是什么驱动程序,但我建议您通过编写创建索引等的例程在应用程序级别处理此问题。

    还可以按照您的建议删除 bson 文件并仅保留 mongodump 中的元数据文件(或者至少在我的情况下它适用于带有wiredtiger 引擎的mongo V 3.0.5)但没有记录 据我所知。

    另一种选择是在 mongodump 上使用 -query 选项来指定要包含的文档,即:{_id:a_non_existing_id},但此选项仅适用于集合级别转储。

    【讨论】:

    • 我曾想过尝试一个无效的查询,但觉得自己超出了规范。我认为将其保留在应用程序级别应该可以很好地工作,将其保留在源代码中并且易于维护。感谢有用的反馈和建议!
    • v 2.6 似乎不喜欢没有 .bson 文件 =(...mongorestore 连接但似乎实际上并没有执行任何操作。
    • @afreeland :-) 出于好奇,我尝试了它并且工作可能与wiredtiger 或操作系统有关(我在linux 机器上尝试过)。无论如何,正如您所说,应用程序是一致性和其他原因的最佳解决方案。
    • 应用程序级别的常见做法是什么。在应用程序初始化期间?访问集合时?将集合和索引存储在配置文件中? mongo 是否有任何记录在案的推荐做法?
    • 我还没有看到任何记录在案的最佳实践。在我第一次建立与 mongoDB 的连接后,我通常会立即做这些事情以及一些健全性检查。 create_index 是对空集合或索引已经存在时的廉价操作。
    猜你喜欢
    • 2021-07-27
    • 1970-01-01
    • 2018-04-10
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    • 2012-07-17
    • 1970-01-01
    相关资源
    最近更新 更多