1

減算を使用して集計クエリを実行しようとすると、奇妙なエラーが発生します。

以下のクエリを使用します。

$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 が上記のエラー メッセージを引き起こしているのでしょうか?

4

1 に答える 1

0

答えは、$subtract を配列でラップする必要があるということです。

'$gte' => array(array('$subtract' => array(20 ,10)), 10)
于 2016-05-10T13:31:42.613 に答える