У меня странная ошибка, когда я пытаюсь выполнить общий запрос с вычитанием.
С запросом ниже:
$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 вызывает указанное выше сообщение об ошибке?
Ответ: вычитание $ должно быть заключено в массив.
'$gte' => array(array('$subtract' => array(20 ,10)), 10)
Других решений пока нет …