簡體   English   中英

如何將Aql查詢與迭代遍歷合並

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

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