Как мне указать, какие коллекции запрашиваются в AQL?

Давайте представим, у меня есть этот график

и я хочу запросить всех партнеров, связанных с пользователем

 WITH partner  
 FOR u IN user
   FILTER u._name == @user_name 
    FOR v IN OUTBOUND user GRAPH 'accounts'
      RETURN v

этот запрос работает, когда @user_name == Client потому что это связано только с партнерами, но когда @user_name == Admin профили возвращаются также, когда я ожидал пустой список (потому что пользователь Admin не имеет партнеров)

Я использую ключевое слово WITH правильно?

1 ответ

Цель WITH Ключевое слово - указать коллекции, участвующие в обходе, чтобы их можно было заблокировать на чтение при запуске запроса, а не лениво во время обхода, что может привести к ситуациям мертвой блокировки. Это требуется для обходов в кластере.

Это не влияет на результат запроса. Если вы хотите вернуть пути, которые заканчиваются на узлах только из определенной коллекции, используйте фильтр с IS_SAME_COLLECTION ():

WITH user, partner, profile
FOR u IN user
  FILTER u._name == @user_name 
  FOR v IN OUTBOUND user GRAPH 'accounts'
    FILTER IS_SAME_COLLECTION('partner', v)
    RETURN v
Другие вопросы по тегам