使用PyMongo 4.3.3时遇arrayFilters未找到错误的技术求助
问题解决:pymongo arrayFilters 报错 "No array filter found for identifier 'elem'"
错误原因
你错误地将arrayFilters嵌套在了update字典内部,而在PyMongo中,arrayFilters是update_many方法的顶层独立参数,不属于update文档的一部分。
修正后的代码
# 插入数据代码(无需修改) db.students.insert_many( [ { "_id" : 1, "grades" : [ { "grade" : 80, "mean" : 75, "std" : 6 }, { "grade" : 85, "mean" : 100, "std" : 4 }, { "grade" : 85, "mean" : 100, "std" : 6 } ] }, { "_id" : 2, "grades" : [ { "grade" : 90, "mean" : 100, "std" : 6 }, { "grade" : 87, "mean" : 100, "std" : 3 }, { "grade" : 85, "mean" : 100, "std" : 4 } ] } ] ) # 修正后的更新代码 cursor = db.students.update_many( filter={}, update={'$inc': {"grades.$[elem].std": -1}}, arrayFilters=[{"elem.grade": {'$gte': 80}, "elem.std": {'$gt': 5}}], upsert=True )
验证结果
执行更新后,可通过以下代码确认修改效果:
for doc in db.students.find({}, {"_id": 1, "grades": 1}): print(doc)
原本满足grade≥80且std>5的元素,std值会减1,比如_id=1中的两个std=6会变为5,_id=2中的std=6会变为5。
内容的提问来源于stack exchange,提问作者stephan
相关产品推荐
相关产品推荐

