web-dev-qa-db-fra.com

mongodump ignore certaines collections spécifiées

J'essayais de sauvegarder ma base de données Mongo sur le serveur du produit, puis de la restaurer sur le serveur de stockage intermédiaire ..__ et voici un problème, il y a beaucoup de collections dans la base de données, je veux igonre certaines collections que je ne possède pas ne voulez pas restaurer sur le serveur de transfert.

Je peux aborder cela en écrasant la base de données intermédiaire, en copiant la base de données productive, puis en rétablissant le produit en utilisant l'option --drop . et restaurer les collections spécifiées dans la base de données intermédiaire. euh .. c'est vraiment mauvais.

1. dump producting db

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

2. dump staging db

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

3. restaurer toute la collection, puis restaurer la collection Restaurer pruduct-dump-dir sur le serveur de transfert

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

Existe-t-il une option telle que ignore-collection quand je suis en train de dumpping? Toute suggestion sera appréciée: 3

30
sashimi

Maintenant disponible à partir de la version 3.0.0

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

Répéter pour exclure plus de 1

Commander la documentation

58
Daniel Pérez Rada

Vous pouvez ajouter --collection COLLECTION_NAME pour vider la collection dont vous avez besoin. Par défaut, si vous ne spécifiez pas une collection à vider d'une base de données, MongoDump dumpera toutes les collections de cette base de données.

6
Nick
mongodump --db test --excludeCollection=users --excludeCollection=salaries
2
Nataniel Paiva

A partir de Mongo 3.4, vous pouvez désormais spécifier une option --nsExclude <namespace pattern> lors de la restauration à partir d'un vidage de la base de données Mongo, ce qui exclura les espaces de noms spécifiés de l'opération de restauration. Ceci est particulièrement utile lorsque l'opération mongodump a déjà eu lieu.

Documentation officielle ici: https://docs.mongodb.com/manual/reference/program/mongorestore/#cmdoption-nsexclude

Vous pouvez exclure plusieurs collections avec des caractères génériques: 

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

Ou bien, spécifier plusieurs options --nsExclude fonctionne aussi:

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

Je devais faire la même chose en sauvegardant une base de données mongo. Si vous utilisez python (ou tout autre langage), vous pouvez également utiliser une approche similaire. Après avoir effectué le mongodump, il vous suffit de supprimer les fichiers bson & metadata.json de la collection indésirable.

    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)
0
Ayush Lal Shrestha