Untuk database saya yang relatif kecil, saya akhirnya menggunakan solusi berikut. Ini tidak terlalu cocok untuk database besar atau kompleks, tetapi cukup untuk kasus saya. Itu membuang semua dokumen sebagai json ke direktori cadangan. Ini kikuk, tetapi tidak bergantung pada hal-hal lain selain 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))