AWS DocumentDB中$multiply与负整数相乘报错问题咨询
AWS DocumentDB中$multiply与负整数NumberInt相乘报错的解决办法
问题概况
在AWS DocumentDB 2.0.8934版本中,使用$multiply操作符时,若参数包含NumberInt(-1)会触发MongoCommandException,错误码17287,提示"Bad query specified"。但相同逻辑在MongoDB中可正常执行,同时以下场景不受影响:
- 正整数之间的
$multiply操作(如$multiply: [ NumberInt(1), NumberInt(1) ]) - 单独给字段赋值
NumberInt(-1) - 直接使用
-1的简易查询(非$multiply或仅简单上下文)
需要注意的是,即使直接用-1,在$cond表达式中结合$multiply仍会报错。
可行解决方案
方案1:用数值字面量替代NumberInt(-1)
将NumberInt(-1)替换为普通的-1字面量,DocumentDB可正常解析执行,且结果会保持整数类型(当另一个参数为NumberInt时):
"$addFields" : { sigh: { $multiply: [ -1, NumberInt(1) ] } }
方案2:通过$subtract间接实现取反效果
如果需要严格保持整数类型的运算逻辑,可利用$subtract替代负整数相乘:
"$addFields" : { sigh: { $subtract: [ 0, NumberInt(1) ] } }
针对多参数相乘的场景,可先计算正整数的乘积,再通过$subtract取反,例如:
"$addFields" : { total: { $subtract: [ 0, { $multiply: [ NumberInt(2), NumberInt(3) ] } ] } }
补充说明
该问题属于DocumentDB 2.x版本的兼容性缺陷,MongoDB原生支持NumberInt(-1)与$multiply的组合操作。若业务允许,升级DocumentDB到3.x及以上版本可彻底解决此问题。
内容的提问来源于stack exchange,提问作者BDF
相关产品推荐
相关产品推荐

