Обычные параметры привязки (с одним @
) могут использоваться только для значений null
, true
, false
, чисел, строк, массивов и объектов. Параметры привязки коллекции (с двумя @@
) могут использоваться там, где указаны имена коллекций.
Передача оператора через параметры привязки невозможна в AQL, так как это может изменить смысл запроса или отобразить он полностью недопустим.
Рассмотрим следующий пример:
FOR v IN myCollection
FILTER v.value @operator @maxValue
Этот запрос даже не выполняет синтаксический анализ, независимо от того, какие значения передаются в параметрах привязки. И это хорошо, потому что в противном случае можно передать что-то вроде @operator: "abc"
, @maxValue: ">="
, что будет означать, что запрос может быть хорошо проанализирован без параметров привязки, но приведет к ошибке синтаксического анализа с введенными параметрами привязки.
Таким образом, самым простым решением здесь является введение оператора сравнения в запрос с помощью подстановки строки шаблона, хотя, конечно, вам необходимо убедиться, что запрошенный оператор сравнения находится в белом списке разрешенных операторов. Но вам нужно будет сделать это даже с параметрами привязки, иначе люди могли бы просто отправить @operator: "!="
или @operator: "NOT IN"
или другие операторы, которых вы либо не ожидаете, либо которые могут сделать ваш запрос более дорогим.