[英]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.