簡體   English   中英

ArangoDB中的聯接遍歷對象結果

[英]Join traversal object results in ArangoDB

我正在使用ArangoDB的遍歷對象 ,以便遍歷遞歸組成員資格結構,同時避免后續循環。 在某些情況下,我需要將兩次遍歷的結果合並在一起。 有沒有一種有效的方法來利用AQL來加入遍歷結果? 我目前正在使用javascript將結果加入內存中。

我想用遍歷圖對此進行解釋。 我們在ANY方向進行兩次遍歷,因此結果的數量要大一些。 我們從具有共同點的鄰居開始,這將成為聯接操作的結果。 一個查詢將查看AE ,這兩個查詢應共同具有B ,而其他查詢則沒有。

基本迭代:

FOR v IN 1..1 ANY 'circles/A' GRAPH 'traversalGraph' RETURN v._key

circles/A開始,這將導致["B","G"] ;從circles/E開始,這將導致["F", "B"] -因此,顯而易見,我們應該僅將"B"作為結果加入。

我們第一種可能的方法是使用兩個子查詢,並使用INTERSECTION它們:

LET firstTraversal = (FOR v IN 1..1 ANY 'circles/A' GRAPH 'traversalGraph' RETURN v)
LET secondTraversal = (FOR v IN 1..1 ANY 'circles/E' GRAPH 'traversalGraph' RETURN v)
RETURN INTERSECTION(firstTraversal, secondTraversal)

這里可能存在的問題是,將對對象進行完整的深度比較,這可能會變得昂貴。 因此,另一種方法是使用它們的_key屬性將它們加入:

LET firstTraversal = (FOR v IN 1..1 ANY 'circles/A' GRAPH 'traversalGraph' RETURN v)
LET secondTraversal = (FOR v IN 1..1 ANY 'circles/E' GRAPH 'traversalGraph' RETURN v)
FOR oneSet IN firstTraversal
  FOR otherSet IN secondTraversal
    FILTER oneSet._key == otherSet._key RETURN oneSet

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM