如何指定在AQL中查询哪些集合?

问题描述 投票:1回答:1

让我想象我有这张图enter image description here

我想查询连接到用户的所有合作伙伴

 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

graph-databases arangodb aql
1个回答
2
投票

WITH关键字的目的是指定collections involved in a traversal,以便在遍历期间可以在查询开始时读取锁定而不是懒惰,这可能导致死锁情况。它是集群中遍历所必需的。

它不会影响查询结果。如果要返回仅来自某个集合的节点的路径,请使用带有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
© www.soinside.com 2019 - 2024. All rights reserved.