MongoDB触发器使用$or运算符后被暂停,报Unknown operator $or错误
MongoDB触发器匹配表达式错误修复
你的触发器报错是因为$or运算符的使用位置不对——MongoDB查询运算符不能直接嵌套在updateDescription.updatedFields对象内部,这个字段本身是存储被更新字段的键值对集合,正确的逻辑应该是先确认state字段被更新,再验证它的新值是否在指定范围内。
正确的匹配表达式
直接针对被更新的state字段做值校验即可,用$in替代$or更简洁高效:
{ "updateDescription.updatedFields.state": { "$in": ["LIVE", "OFFLINE", "DRAFT"] } }
更严谨的写法(可选)
如果需要确保触发器仅在state字段被更新时触发(排除其他字段更新的情况),可以加上对updatedFields的存在性校验:
{ "updateDescription.updatedFields": { "$exists": true, "$type": "object" }, "updateDescription.updatedFields.state": { "$in": ["LIVE", "OFFLINE", "DRAFT"] } }
错误原因说明
你原来的写法把$or作为updateDescription.updatedFields的子字段,这不符合MongoDB查询语法规则——$or这类逻辑运算符需要作为查询条件的顶层元素,或者放在对应字段的校验层级中,而不是直接作为被更新字段对象的一部分。
内容的提问来源于stack exchange,提问作者FaisalAhmed
相关产品推荐
相关产品推荐

