it-swarm.com.de

mongodump ignoriert einige angegebene Sammlungen

Ich habe versucht, meine Mongo-Datenbank auf dem Produkt server zu sichern. Und dann wieder auf den Staging-Server wiederherzustellen ... und hier kommt ein Problem, es gibt viele Sammlungen in db, ich möchte einige Sammlungen, die ich nicht erstellt habe Ich möchte nicht auf dem Staging-Server wiederherstellen.

Ich kann dies erreichen, indem Sie die Staging-Datenbank dumppen, die Produkt-DB überspielen und dann das Produkt mit der Option --drop wiederherstellen. und stellen Sie die angegebenen Sammlungen in Staging-Datenbank wieder her. Es ist wirklich schlimm.

1. Dump-Produktion 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. Stellen Sie die gesamte Sammlung wieder her, und stellen Sie dann die Sammlung Des Wiederherstellungsprogramms auf dem Staging-Server wieder her

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

Gibt es eine Option wie die Ignoriere-Sammlung, wenn ich mich umgekauert habe? Vorschläge werden gerne angenommen: 3

30
sashimi

Jetzt ab Version 3.0.0 verfügbar

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

Wiederholen Sie den Vorgang, um mehr als 1 auszuschließen

Kasse die Dokumentation

58

Sie können --collection COLLECTION_NAME hinzufügen, um die benötigte Sammlung zu sichern. Wenn Sie keine Sammlung angeben, die aus einer Datenbank gesichert werden soll, wird MongoDump standardmäßig alle Sammlungen in dieser Datenbank sichern.

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

Ab Mongo 3.4 können Sie jetzt beim Wiederherstellen aus einem Mongo-Datenbank-Dump eine --nsExclude <namespace pattern>-Option angeben, durch die die angegebenen Namespaces von der Wiederherstellungsoperation ausgeschlossen werden. Dies ist besonders nützlich, wenn die mongodump-Operation bereits ausgeführt wurde.

Offizielle Dokumentation hier: https://docs.mongodb.com/manual/reference/program/mongorestore/#cmdoption-nsexclude

Sie können mehrere Sammlungen mit Platzhaltern ausschließen: 

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

Alternativ können auch mehrere --nsExclude-Optionen angegeben werden:

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

Ich musste das Gleiche tun, während ich eine Mongo-Db sicherte. Wenn Sie Python (oder eine andere Sprache) verwenden, können Sie auch einen ähnlichen Ansatz verwenden. Nach dem Mongodump müssen Sie einfach die bson & die metadata.json-Dateien der unerwünschten Sammlung entfernen.

    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