Für meine relativ kleine kleine Datenbank habe ich schließlich die folgende Lösung verwendet. Es ist nicht wirklich geeignet für große oder komplexe Datenbanken, aber es reicht für meinen Fall aus. Es legt alle Dokumente als json im Backup-Verzeichnis ab. Es ist klobig, aber es verlässt sich nicht auf andere Dinge als Pymongo.
from os.path import join
import pymongo
from bson.json_utils import dumps
def backup_db(backup_db_dir):
client = pymongo.MongoClient(host=<host>, port=<port>)
database = client[<db_name>]
authenticated = database.authenticate(<uname>,<pwd>)
assert authenticated, "Could not authenticate to database!"
collections = database.collection_names()
for i, collection_name in enumerate(collections):
col = getattr(database,collections[i])
collection = col.find()
jsonpath = collection_name + ".json"
jsonpath = join(backup_db_dir, jsonpath)
with open(jsonpath, 'wb') as jsonfile:
jsonfile.write(dumps(collection))