Skip to content

Instantly share code, notes, and snippets.

@redcapua
Forked from Lh4cKg/mongodb_backup.py
Created February 18, 2025 10:57
Show Gist options
  • Select an option

  • Save redcapua/41d61ddab4ecc0abcb68a565529b065c to your computer and use it in GitHub Desktop.

Select an option

Save redcapua/41d61ddab4ecc0abcb68a565529b065c to your computer and use it in GitHub Desktop.

Revisions

  1. @Lh4cKg Lh4cKg created this gist Jan 22, 2020.
    51 changes: 51 additions & 0 deletions mongodb_backup.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,51 @@
    import bson
    from pymongo import MongoClient




    def dump(collections, conn, db_name, path):
    """
    MongoDB Dump
    :param collections: Database collections name
    :param conn: MongoDB client connection
    :param db_name: Database name
    :param path:
    :return:
    >>> DB_BACKUP_DIR = '/path/backups/'
    >>> conn = MongoClient("mongodb://admin:[email protected]:27017", authSource="admin")
    >>> db_name = 'my_db'
    >>> collections = ['collection_name', 'collection_name1', 'collection_name2']
    >>> dump(collections, conn, db_name, DB_BACKUP_DIR)
    """

    db = conn[db_name]
    for coll in collections:
    with open(os.path.join(path, f'{coll}.bson'), 'wb+') as f:
    for doc in db[coll].find():
    f.write(bson.BSON.encode(doc))


    def restore(path, conn, db_name):
    """
    MongoDB Restore
    :param path: Database dumped path
    :param conn: MongoDB client connection
    :param db_name: Database name
    :return:
    >>> DB_BACKUP_DIR = '/path/backups/'
    >>> conn = MongoClient("mongodb://admin:[email protected]:27017", authSource="admin")
    >>> db_name = 'my_db'
    >>> restore(DB_BACKUP_DIR, conn, db_name)
    """

    db = conn[db_name]
    for coll in os.listdir(path):
    if coll.endswith('.bson'):
    with open(os.path.join(path, coll), 'rb+') as f:
    db[coll.split('.')[0]].insert_many(bson.decode_all(f.read()))