Voor mijn relatief kleine kleine database heb ik uiteindelijk de volgende oplossing gebruikt. Het is niet echt geschikt voor grote of complexe databases, maar voor mijn geval is het voldoende. Het dumpt alle documenten als een json naar de back-upmap. Het is onhandig, maar het is niet afhankelijk van andere dingen dan 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))