[英]How to merge aql query with iterative traversal
我想使用AQL在ArangoDB中查詢集合,並在查詢的每個節點上使用遍歷擴展節點。
我試圖通過使用集合查詢中的LET語句將遍歷作為子查詢來調用來實現。 即使查詢完成,遍歷的結果集也為空。
FOR ne IN energy
FILTER ne.identifier == "12345"
LET ne_edges = (
FOR v, e IN 1..1 ANY ne relation
RETURN e
)
RETURN MERGE(ne, {"edges": ne_edges})
[
{
"value": 123.99,
"edges": []
}
]
我已經驗證了存在邊,並且在不作為子查詢執行時遍歷會正確返回。
從子查詢返回結果之前,似乎初始查詢已完成,給出了以下結果。
我想念什么? 或者,還有更好的方法?
我可以想到兩種方法來做到這一點。 這第一個更容易理解,但是第二個更緊湊。 對於以下示例,我有一個頂點集合test2和一個邊緣集合testEdge,它們鏈接了test2中的父項和子項
使用收集:
let seed = (FOR testItem IN test2
FILTER testItem._id in ['test2/Q1', 'test2/Q3']
RETURN testItem._id)
let traversal = (FOR seedItem in seed
FOR v, e IN 1..1 ANY seedItem
testEdge
RETURN {seed: seedItem, e_to: e._to})
for t in traversal
COLLECT seeds = t.seed INTO groups = t.e_to
return {myseed: seeds, mygroups: groups}
在上方,我們首先獲取要遍歷的項目(種子),然后執行遍歷並獲取具有種子.id和相關邊的對象,然后最后使用collect into
將結果分組
使用數組擴展
FOR testItem IN test2
FILTER testItem._id in ['test2/Q1', 'test2/Q3']
LET testEdges = (
FOR v, e IN 1..1 ANY testItem testEdge
RETURN e
)
RETURN {myseed: testItem._id, mygroups: testEdges[*]._to}
這次,我們使用let
語句結合了種子搜索和遍歷。 然后我們使用數組擴展將項目分組
無論哪種情況,我最終都會看到如下內容:
[
{
"myseed": "test2/Q1",
"mygroups": [
"test2/Q1-P5-2",
"test2/Q1-P6-3",
"test2/Q1-P4-1"
]
},
{
"myseed": "test2/Q3",
"mygroups": [
"test2/Q3",
"test2/Q3"
]
}
]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.