48

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

我可以通过转储暂存数据库,转储生产数据库,然后使用--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

4

5 回答 5

92

现在可从版本 3.0.0 开始

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

重复排除超过 1 个

查看文档

于 2015-03-10T23:32:38.667 回答
9
mongodump --db test --excludeCollection=users --excludeCollection=salaries
于 2017-10-02T16:13:38.023 回答
8

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

于 2013-04-12T09:18:51.467 回答
7

从 Mongo 3.4 开始,您现在--nsExclude <namespace pattern>可以在从 Mongo 数据库转储恢复时指定一个选项,这将从恢复操作中排除指定的命名空间。这在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'
于 2017-11-14T23:02:33.883 回答
0

在备份 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)
于 2019-02-19T15:11:00.380 回答