MongoDB $减去$ redact投掷'对象已经是一个运算符表达式'错误

时间:2016-04-25 16:56:15

标签: php mongodb mongodb-query aggregation-framework mongodb-aggregation

当我尝试使用减法运行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:此对象已经是   运算符表达式,不能用作文档表达式(at   ' 0&#39)

现在当我删除$ subtract并运行它时:

$ops = array(
                array(
                    '$redact' => array(
                        '$cond' => array(
                            'if' => array( 
                                '$gte' => array(10,10)
                            ),
                            'then' => '$$KEEP',
                            'else' => '$$PRUNE'
                        )
                    )
                )
            );

如果10大于10,则进行比较,没有错误。那么为什么$ subtract导致上述错误消息?

1 个答案:

答案 0 :(得分:0)

答案是$ subtract必须包装在数组中。

'$gte' => array(array('$subtract' => array(20 ,10)), 10)