【问题标题】:mongodump ignore some specified collectionsmongodump 忽略一些指定的集合
【发布时间】:2013-04-04 10:58:57
【问题描述】:

我试图在产品服务器上备份我的 mongo 数据库。然后恢复然后回到登台服务器。 这里出现了一些问题,db 中有很多集合,我想取消一些我不想在暂存服务器上恢复的集合。

我可以通过转储暂存数据库,转储生产数据库,然后使用 --drop 选项将产品恢复到暂存来解决此问题。并在 staging db 中恢复指定的集合。呃..真的很糟糕。

1.转储生产数据库

mongodump --host product-server-host --username abcd --password bcda -d db -o pruduct-dump-dir

2。转储暂存数据库

mongodump --host staging-server-host --username abcd --password bcda -d db -o staging -dump-dir

3.恢复所有收藏,然后恢复收藏 将 pruduct-dump-dir 恢复到登台服务器

mongorestore --host staging-server-host --username abcd --password bcda --drop pruduct-dump-dir

mongorestore --host staging-server-host --username abcd --password bcda --drop --collection coll pruducting-dump-dir

当我倾倒时,有没有像忽略收集这样的选项? 任何建议将不胜感激:3

【问题讨论】:

    标签: mongodb mongodump


    【解决方案1】:

    现在可从版本 3.0.0 开始

    --excludeCollection <collection_name>
    --excludeCollectionsWithPrefix <collection_prefix>
    

    重复排除超过 1 个

    结帐the documentation

    【讨论】:

    • 所述文档似乎完全没有说明“字符串数组”的含义。在 shell 中并没有真正统一的将数组作为参数的想法,所以这可能意味着任何事情。它是一个带有逗号分隔符的字符串吗?在遇到新标志之前是否有任意数量的字符串?我们应该在它周围加上()s 或[] 吗?用不同的集合重复标志怎么样?所有这些都用作数组的替代品,如果有人能澄清他们真正想要的东西,那就太好了。
    • @Thor84no 你是对的,没有说明这意味着什么。但是要排除多个集合,您可以重复 excludeCollection 参数(我认为这就是数组的含义)。示例:mongodump --excludeCollection=users --excludeCollection=jobs -d mydatabase
    • 谢谢,很有帮助。
    • 终于可以使用--excludeCollection了!谢谢@DanielPérezRada
    【解决方案2】:

    我在备份 mongo 数据库时也必须这样做。如果您使用 python(或任何其他语言),您也可以使用类似的方法。完成 mongodump 后,您只需删除不需要的集合的 bson 和 metadata.json 文件。

        import os
        EXCLUDE_COLLECTIONS = ['collection_1', 'collection_2']
        db_dump_path = "/Path/to/mongodump"
        db_name = "name_of_db"
        for collection_name in EXCLUDE_COLLECTIONS:
            bson_file_path = os.path.join(db_dump_path, db_name, '{}.bson'.format(collection_name)
            meta_file_path = os.path.join(db_dump_path, db_name, '{}.metadata.json'.format(collection_name)
            if os.path.exists(bson_file_path) and os.path.exists(meta_file_path):
                os.remove(bson_file_path)
                os.remove(meta_file_path)
    

    【讨论】:

      【解决方案3】:

      从 Mongo 3.4 开始,您现在可以在从 Mongo 数据库转储还原时指定 --nsExclude &lt;namespace pattern&gt; 选项,这将从还原操作中排除指定的命名空间。这在 mongodump 操作已经发生时特别有用。

      官方文档在这里:https://docs.mongodb.com/manual/reference/program/mongorestore/#cmdoption-nsexclude

      您可以使用通配符排除多个集合:

      mongorestore --db test --nsExclude 'test.*_tmp'
      

      或者,指定多个--nsExclude 选项也可以:

      mongorestore --db test --nsExclude 'test.collection1' --nsExclude 'test.collection2'
      

      【讨论】:

      • 您也可以使用 --nsInclude 代替 --db mongorestore --nsInclude test --nsExclude 'test.collection1' --nsExclude 'test.collection2'
      【解决方案4】:
      mongodump --db test --excludeCollection=users --excludeCollection=salaries
      

      【讨论】:

      • 是否可以添加描述来回答。我不确定只有代码的答案是否良好且 stackoveflow 标准。
      【解决方案5】:

      您可以添加--collection COLLECTION_NAME 来转储您需要的集合。默认情况下,如果您未指定要从数据库转储的集合,MongoDump 将转储该数据库中的所有集合。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-27
      • 2016-01-12
      • 1970-01-01
      • 2021-08-05
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      相关资源
      最近更新 更多