从 PyMongo 3.6 开始在数据库之间移动文档的正确方法是什么?



我曾经使用过pymongo.bulk.BulkOperationBuilder但文档说它已被弃用。

官方的MongoDB有db.cloneCollection()但我在PyMongo中找不到类似的东西,除了copydb但这不是我需要的。

所以我找到了两种在 colls 之间批量插入文档并在之后删除它们的方法。我还没有测试过它们,我想先问你一个建议,因为可能有更好的方法。

解决方案#1。

coll_from = mongo['db_1']['coll_name']
coll_to = mongo['db_2']['coll_name']
requests = (InsertOne(doc) for doc in coll_from.find())
result = coll_to.bulk_write(requests, ordered=False)
db_from.drop_collection('coll_name')

解决方案#2。

coll_from = mongo['db_1']['coll_name']
coll_to = mongo['db_2']['coll_name']
coll_to.insert_many(coll_from.find())
db_from.drop_collection('coll_name')

有没有更好的方法可以在数据库之间批量移动文档?

记录的cloneCollection是一个命令。

Pymongo API 在pymongo.database.Database的实例上公开了一个command方法。

可以按以下方式应用此功能,以从远程集合克隆名称相似的集合。

client = MongoClient()
clone_cmd = {
'cloneCollection': 'db_1.coll_name',
'from': '<hostname>'
}
client.db_2.command(clone_cmd)

最新更新