在mongodb中更新与查询匹配的多个数组元素

2024-05-13 11:25:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用python代码更新与查询匹配的数组中的多个元素。以下是我的文档结构:

    doc: {
    "userId":327238,
    "assessmentId":115513,
    "institutionId":1632,
    "subjects":[
        {"Id":238,"Included":false,"Rank":1},
        {"Id":239,"Included":true,"Rank":4},
        {"Id":240,"Included":false,"Rank":1},
        {"Id":241,"Included":true,"Rank":10}
     ]
   }

我想设置“Rank”:0仅用于包含“Included”的数组元素:false。我尝试了下面的代码,但它设置了“Rank”:所有数组元素都为0

 query = {"assessmentId":115513, "institutionId":1632, "subjects":{"$elemMatch":{"Included":false}}}
 update = {"$set":{"subjects.$[].Rank":0}}
 db.test.update_many(query, update)

任何帮助都将不胜感激。多谢各位


Tags: 代码文档idfalsetrue元素update数组
1条回答
网友
1楼 · 发布于 2024-05-13 11:25:52

您需要按如下方式使用位置运算符+阵列过滤器:

mongo shell:

db.test.updateMany( {"doc.assessmentId":115513, "doc.institutionId":1632 } ,{"$set":{"doc.subjects.$[fs].Rank":0}},{arrayFilters:[{"fs.Included":false} ]}  )

python:

query={"doc.assessmentId":115513, "doc.institutionId":1632 }
update={"$set":{"doc.subjects.$[fs].Rank":0}}
db.test.update_many( query ,update,array_filters=[{"fs.Included":False} ]  )

解释: 在arrayFilter中定义变量fs.include:false,该变量将用于匹配update$set阶段中的数组对象,并且只有匹配的数组对象的秩将设置为0

相关问题 更多 >