AQL: (почему) не работают такие функции документа, как HAS, UNSET?

Я пытаюсь использовать функции документа, такие как HAS, UNSET и т. Д. (Надеюсь), как они описаны в документации. К сожалению, это приводит к синтаксической ошибке 1501. Я также вижу, что они НЕ выделяются в редакторе AQL, как другие сигнальные слова.

Вот один пример (который я также тестировал на обучающем сервере):

FOR u IN users
    LIMIT 1
    UNSET(u, "birthday")
RETURN u

Кто-нибудь видит, что не так?


person augustin-s    schedule 26.01.2015    source источник


Ответы (3)


Функция AQL не может появляться на верхнем уровне AQL. Единственное, что разрешено на верхнем уровне, - это такие операторы, как FOR, FILTER, RETURN, LET, COLLECT, SORT, INSERT и т. Д. Если функция должна быть выполнена, ее возвращаемое значение должно быть записано внутри оператора LET для дальнейшей обработки, или , если дальнейшая обработка не требуется, функцию можно вызвать в выражении RETURNs, например

FOR u IN users
  LIMIT 1
  RETURN UNSET(u, "birthday")
person stj    schedule 26.01.2015

Хорошо, хорошо ... после того, как я написал это, я понял: это нужно присвоить чему-то. например

FOR u IN users
    LIMIT 1
    LET tmp = UNSET(u, "birthday")
RETURN tmp

Извините за публикацию ... но я сохраняю это, может быть, другие новички совершают ту же ошибку :-)

person augustin-s    schedule 26.01.2015

Это может быть полезно для других пользователей: функция UNSET фактически не заменяет документ в коллекции. Для этого нужно запустить

FOR u IN users
    LIMIT 1
    LET u_new = UNSET(u, "birthday")
    REPLACE u WITH u_new IN users
person Elias Strehle    schedule 09.10.2017