Pour ma base de données relativement petite, j'ai finalement utilisé la solution suivante. Ce n'est pas vraiment adapté aux bases de données volumineuses ou complexes, mais cela suffit pour mon cas. Il vide tous les documents au format JSON dans le répertoire de sauvegarde. C'est maladroit, mais il ne repose pas sur d'autres choses que 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))