【问题标题】:PyMongo/Mongoengine equivalent of mongodumpPyMongo/Mongoengine 相当于 mongodump
【发布时间】:2014-08-27 22:17:56
【问题描述】:

PyMongomongoengine 中是否有与 MongoDB 的 mongodump 等效的功能?我似乎在文档中找不到任何东西。

用例:我需要定期备份远程 mongo 数据库。本机是生产服务器,没有安装mongo,我也没有admin权限,所以不能用subprocess调用mongodump。我可以在 virtualenv 上本地安装 mongo 客户端,但我更喜欢 API 调用。

非常感谢:-)。

【问题讨论】:

  • Pymongo 因此 MongoEngine 只连接到mongod 进程。但是,解决您的问题的一种方法可能是在远程计算机上简单地运行mongodump,因为您可以使用mongodump/restore 等连接到任何远程数据库。您不需要在托管的计算机上运行mondodump分贝。有意义吗?
  • 嗯。我想提取所有文档然后构建一个 BSON 文件会更容易。

标签: python mongodb pymongo mongoengine


【解决方案1】:

接受的答案不再有效。这是修改后的代码:

from os.path import join
import pymongo
from bson.json_util import dumps

def backup_db(backup_db_dir):
    client = pymongo.MongoClient(host=..., port=..., username=..., password=...)
    database = client[<db_name>]
    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).encode())


backup_db('.')

【讨论】:

    【解决方案2】:

    对于我相对较小的小型数据库,我最终使用了以下解决方案。它不太适合大型或复杂的数据库,但对于我的情况来说已经足够了。它将所有文档以 json 格式转储到备份目录。它很笨重,但它不依赖于 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))
    

    【讨论】:

    • 感谢您发布此信息!这与 cli mongodump 有什么不同吗?生成的 json 文件是否可以与 mongorestore 一起使用?
    • 如果您不打算一次将所有文档保存在内存中,您可以考虑迭代 col.find() 的结果。您确实提到了“相对较小的小型数据库”。
    • 我们可以存储为 bson 吗?
    • 这应该来自 bson.json_util 导入转储而不是 utils。!!!!!!
    • 这很好,但不会创建 .bson.metadata.json 文件。所以我认为使用mongorestore 恢复将无法。
    猜你喜欢
    • 2020-08-13
    • 1970-01-01
    • 2012-08-17
    • 2014-08-16
    • 2020-02-26
    • 1970-01-01
    • 2016-05-17
    • 2015-07-16
    • 2021-08-23
    相关资源
    最近更新 更多