如何使用 pymongo 在 mongodb 中重命名父字段名称和嵌套字段值?
Posted
技术标签:
【中文标题】如何使用 pymongo 在 mongodb 中重命名父字段名称和嵌套字段值?【英文标题】:How do I rename parent field name and nested field value in mongodb using pymongo? 【发布时间】:2021-06-08 02:19:15 【问题描述】:我有以下文件:
"dataset_path":"path_of_dataset",
"project_1":
"model_1":"path_of_model_1",
"model_2":"path_of_model_2"
我想将 "project_1" 更改为 "renamed_project_1" 和 "path_of_model_1" 更改为 "new_model_1_path" .结果输出应该如下:
"dataset_path":"path_of_dataset",
"renamed_project_1":
"renamed_model_1":"new_model_1_path",
"model_2":"path_of_model_2"
这是我尝试过的:
db.collection.update_many('dataset_path': 'path_to_dataset', '$rename': "project_1": "renamed_project_1",
'$set': "project_1.model_1": "new_model_1_path")
但上面的查询会抛出以下错误:
pymongo.errors.WriteError: 更新路径 X 会产生冲突 在 X 处。
【问题讨论】:
【参考方案1】:那是因为您试图在单个查询中对 project_1
字段进行两次变异。 Mongo只是不知道如何处理。
您应该考虑拆分两个操作:
db.collection.update_many('dataset_path': 'path_to_dataset', '$rename': "project_1": "renamed_project_1")
db.collection.update_many('dataset_path': 'path_to_dataset', '$set': "renamed_project_1.model_1": "new_model_1_path")
【讨论】:
另外,我不相信使用单个查询是可能的。这对我来说听起来很奇怪。以上是关于如何使用 pymongo 在 mongodb 中重命名父字段名称和嵌套字段值?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 pymongo 将新的值数组附加到 mongodb 中的现有数组文档?