W przypadku mojej stosunkowo małej bazy danych ostatecznie zastosowałem następujące rozwiązanie. To nie jest odpowiednie dla dużych lub złożonych baz danych, ale w moim przypadku jest wystarczające. Zrzuca wszystkie dokumenty jako json do katalogu kopii zapasowej. Jest niezgrabny, ale nie opiera się na innych rzeczach niż 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))