我曾经使用过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)