python - 从 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 之间批量移动文档?
解决方案
cloneCollection
正如所记录的是一个命令。
Pymongo APIcommand
在pymongo.database.Database
.
这可以通过以下方式应用,以从远程集合克隆类似命名的集合。
client = MongoClient()
clone_cmd = {
'cloneCollection': 'db_1.coll_name',
'from': '<hostname>'
}
client.db_2.command(clone_cmd)
推荐阅读
- html - 如何更改和添加适用于 iOS 的 GDPR 同意表.html 文件
- d3.js - 无法在力有向图上向节点添加标签
- c# - 端到端测试中的依赖注入
- r - 如何修复我的 XTS(时间序列)以与我的 CSV 文件相关联?
- css - 0 padding 与 1px 的不同行为
- php - 在我的网站上重写 URL,但在子文件夹上重写我的索引
- react-native - ScrollView 不遵守 flex 规则
- c - 矩阵中的最长路径
- macos - 右键单击以在 MacOS 上使用 DeepL 翻译器进行翻译(查找)
- sublimetext3 - 将 Terminality 与 sublime text 3 集成的问题