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

问题描述

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

官方的MongoDB有,但我在PyMongodb.cloneCollection()中找不到类似的东西,但它不是我需要的。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')

有没有更好的方法在 dbs 之间批量移动文档?

标签: pythondatabasepymongo

解决方案


cloneCollection正如所记录的是一个命令。

Pymongo APIcommandpymongo.database.Database.

这可以通过以下方式应用,以从远程集合克隆类似命名的集合。

client = MongoClient()

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

推荐阅读