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

时间:2018-02-06 14:37:14

标签: graph-databases arangodb aql

让我想象我有这个图 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

1 个答案:

答案 0 :(得分: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