MongoDB如何向多层嵌套数组内的文档添加新信息?
多层嵌套数组文档的更新方案(PyMongo实现)
我是MongoDB新手,目前用Python的pymongo操作数据库,遇到了多层嵌套数组的文档更新问题。
原始文档结构
{ '_id': ObjectId('633c6ee4317752423543e8c8'), 'ID1': -1, 'Engagements': [ { 'ID2': '-2', 'Session': [ {'GUID': '123', 'Created_Date': '01-01-2022'}, {'GUID': '012', 'Created_Date': '01-01-2021'} ] }, { 'ID2': '-3', 'Session': [ {'GUID': '234', 'Created_Date': '01-02-2022'}, {'GUID': '456', 'Created_Date': '01-03-2022'} ] } ] }
目标更新效果
需要找到GUID等于123的嵌套对象,添加新字段New_Info,更新后结构如下:
{ '_id': ObjectId('633c6ee4317752423543e8c8'), 'ID1': -1, 'Engagements': [ { 'ID2': '-2', 'Session': [ {'GUID': '123', 'Created_Date': '01-01-2022', 'New_Info': '999'}, {'GUID': '012', 'Created_Date': '01-01-2021'} ] }, { 'ID2': '-3', 'Session': [ {'GUID': '234', 'Created_Date': '01-02-2022'}, {'GUID': '456', 'Created_Date': '01-03-2022'} ] } ] }
PyMongo实现代码
from bson.objectid import ObjectId collection_example.update_one( {"_id": ObjectId("633c6ee4317752423543e8c8")}, {"$set": {"Engagements.$[engElem].Session.$[sessElem].New_Info": "999"}}, array_filters=[{"engElem.ID2": "-2"}, {"sessElem.GUID": "123"}], upsert=False )
代码说明
update_one:通过_id精准定位目标文档,仅更新匹配到的第一个文档$set:指定要更新的嵌套字段路径,利用数组过滤器占位符$[engElem]和$[sessElem]定位多层数组中的目标元素array_filters:定义两层过滤规则:- 匹配
Engagements数组中ID2为-2的元素 - 在上述元素的
Session数组中,匹配GUID为123的对象
- 匹配
upsert=False:未找到匹配文档时,不自动插入新文档
内容的提问来源于stack exchange,提问作者AquaEthan
相关产品推荐
相关产品推荐

