簡體   English   中英

AQL Arango-使用Edge獲取頂點和鄰居

[英]AQL Arango - Get Vertex and Neighbors using Edges

來自neo4j和new到Arango。

我正在嘗試查詢我的數據並建立相應的數據結構。

所以我有這樣的事情:

    Circle A
    /       \
 Square A    Circle B 
            /     \         \
       Circle C   Square B  Square D

圓存儲在文檔集合中。 方格存儲在文檔集合中。

然后,我有兩個對應的邊緣集合HAS_CIRCLE和HAS_SQUARE。

我知道我想要Circle B和它的倍數-這樣的結構。

{
    circle: {data from Circle B},
    parents: [{data from Circle A}],
    children: [{data from Circle C}],
    squares: [{data from Square B}, {data from Square D}]
}

*還要注意,我不想嵌套此結構。 就像當我想要{Circle A中的數據}放在parents -我不希望它也有父級,子級和正方形-只是從字面上查找該節點中包含的元數據。

我知道我可以這樣開始...但是我很快就迷路了。 甚至在進行基礎操作時-我似乎也無法正確收集它並將數組與鍵關聯。

FOR c in Circle
    FILTER c.name === 'Circle B'
    FOR hc in HAS_CIRCLE
        FILTER hc._from === c._id

您一定錯過了ArangoDB中的圖形文檔之旅 當然,您可以將文檔查詢與經典聯接一起使用(就像您嘗試過的那樣)來進行圖迭代,並像在其他任何RDBMS上的傳統SQL中一樣進行映射。

但是,如果您在以下查詢中使用模式匹配遍歷 ,則ArangoDB會展現其真正的制圖能力:

FOR vertex, edge, path IN 
  1..5 
  OUTBOUND
  'circle/A'
  GRAPH circesAndSquares 
    FILTER edge.name == 'Circle B'
     RETURN {vertices: vertex, edges: edge, paths: path}

edge將包含當前遍歷步驟的邊緣文件, vertex的頂點。 FILTER它們會在RETURN語句中隱藏不匹配的文檔。 可以在迭代深度上過濾路徑,這可能會導致遍歷失敗:

FILTER path.edges[1].name == 'Circle B'

您還可以過濾任何迭代深度:

FILTER path.vertices[*].isValid == true

文檔中的示例演示了如何使用命名圖和匿名圖以及如何將數據插入ArangoDB。 ArangoDB有一個特殊的邊緣集合類型 ,它隱式知道並在邊緣文檔上強制使用_from_to屬性-但是_to限制外,您還可以用任意文檔填充它。

您還可以將常規AQL查詢與圖遍歷相結合,如本示例所示

非常感謝@dothebart-這確實使我指出了正確的方向。

我的查詢最終看起來像。 仍然不是100%,如果這是最理想的,但是會產生我一直在尋找的結果。

FOR c IN Circle
  FILTER c.name == 'Circle B'
        RETURN {
            "circle" : c,
            "parents":  ( FOR parents IN INBOUND b._id HAS_CIRCLE RETURN parents )),
            "children": ( FOR children IN OUTBOUND b._id HAS_CIRCLE RETURN children ),
            "squares":  ( FOR squares IN OUTBOUND b._id HAS_SQUARE RETURN squares )
        }

暫無
暫無

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

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