Pro moji relativně malou databázi jsem nakonec použil následující řešení. Není to opravdu vhodné pro velké nebo složité databáze, ale pro můj případ to stačí. Vypíše všechny dokumenty jako json do záložního adresáře. Je to neohrabané, ale nespoléhá to na jiné věci než na 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))