简体   繁体   English

如何使用 pymongo 重命名 mongodb 中的父字段名称和嵌套字段值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM