当我尝试使用减法运行 aggreate 查询时,我遇到了一个奇怪的错误。
使用下面的查询:
$ops = array(
array(
'$redact' => array(
'$cond' => array(
'if' => array(
'$gte' => array('$subtract' => array(20 ,10), 10)
),
'then' => '$$KEEP',
'else' => '$$PRUNE'
)
)
)
);
$results = $collection ->aggregate($ops);
从逻辑上讲,这应该减去 20 - 10,如果结果大于或等于 10,则比较。问题是它抛出了这个错误:
MongoResultException: localhost:27017: 此对象已经是一个 运算符表达式,并且不能用作文档表达式(在 "0")
现在,当我删除$subtract并运行以下命令时:
$ops = array(
array(
'$redact' => array(
'$cond' => array(
'if' => array(
'$gte' => array(10,10)
),
'then' => '$$KEEP',
'else' => '$$PRUNE'
)
)
)
);
如果 10 大于 10,则进行比较,这在没有错误的情况下工作。那么为什么$subtract会导致上述错误消息呢?
答案是$subtract必须包装在数组中。
'$gte' => array(array('$subtract' => array(20 ,10)), 10)