Как мне указать, какие коллекции запрашиваются в 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