Я думаю, что лучший способ достичь этого для общего запроса выбора со структурой, подобной
Q = "Для вас в пользователях FILTER 'x@example.com' = u.email"
- сначала добавить предложение LIMIT к запросу и только заставить его возвращать постоянное значение (в отличие от полного документа).
Например, следующий запрос возвращает одно совпадение, если такой документ существует, или пустой массив, если совпадения нет:
FOR u IN users FILTER 'x@example.com' == u.email LIMIT 1 RETURN 1
(обратите внимание, что я также изменил оператор с =
на ==
, поскольку в противном случае запрос не будет проанализирован).
Обратите внимание, что этот запрос может принести большую пользу от создания индекса для атрибута поиска, т.е. email
. Без индекса запрос будет выполнять полное сканирование коллекции и останавливаться на первом совпадении, тогда как с индексом он будет считывать не более одной записи индекса.
Наконец, чтобы ответить на ваш вопрос, шаблон для EXISTS
-подобного запроса станет
LENGTH(%Q LIMIT 1 RETURN 1)
или уточнено в примере запроса:
LENGTH(FOR u IN users FILTER 'x@example.com' == u.email LIMIT 1 RETURN 1)
LENGTH(...)
вернет количество совпадений, которое в этом случае будет либо 0, либо 1. И это также может быть использовано в условиях фильтрации, таких как:
FOR ....
FILTER LENGTH(...)
RETURN ...
потому что LENGTH(...)
будет либо 0, либо 1, что в контексте условия FILTER будет равно false или true.