[英]How do I rename parent field name and nested field value in mongodb using pymongo?
I have following document:我有以下文件:
{
"dataset_path":"path_of_dataset",
"project_1":{
"model_1":"path_of_model_1",
"model_2":"path_of_model_2"
}
}
I want to change "project_1" to "renamed_project_1" and "path_of_model_1" to "new_model_1_path" .我想将“project_1”更改为“renamed_project_1” ,将“path_of_model_1”更改为“new_model_1_path” 。 The resultant output should be as follows:
结果 output 应如下所示:
{
"dataset_path":"path_of_dataset",
"renamed_project_1":{
"renamed_model_1":"new_model_1_path",
"model_2":"path_of_model_2"
}
}
Here is what I tried:这是我尝试过的:
db.collection.update_many({'dataset_path': 'path_to_dataset'}, {'$rename': {"project_1": "renamed_project_1"}},
{'$set': {"project_1.model_1": "new_model_1_path"}})
but the above query throws following error:但上面的查询抛出以下错误:
pymongo.errors.WriteError: Updating the path X would create a conflict at X.
pymongo.errors.WriteError:更新路径 X 会在 X 处产生冲突。
That's because you're trying to mutate project_1
field two times in a single query.那是因为您试图在单个查询中对
project_1
字段进行两次变异。 Mongo just doesn't know how to deal with that. Mongo只是不知道如何处理。 You should consider splitting two operations:
您应该考虑拆分两个操作:
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"}})
db.collection.update_many({}, {"$rename": {"old_value": "new_value"}})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.