You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 09:32:53