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

时间:2018-05-14 12:17:47

标签: python database pymongo

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

官方MongoDBdb.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')

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

1 个答案:

答案 0 :(得分:0)

cloneCollection因为documented是一个命令。

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

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

client = MongoClient()

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