在ArangoDB AQL中,如何从图遍历中返回顶点和边?

now*_*now 5 arangodb aql

我想返回在图遍历查询期间遇到的所有唯一边和所有唯一顶点的列表。这给出了我想要的结果,但我执行了相同的查询两次:

    LET eResults = (    
        FOR v,e
            IN 1..2
            ANY "entities/198593"
            relations
            OPTIONS { uniqueEdges: "path", bfs: true }
            RETURN DISTINCT KEEP(e, "_key", "_from", "_to", "type")
    )
    LET vResults = (
        FOR v,e
            IN 1..2
            ANY "entities/198593"
            relations
            OPTIONS { uniqueEdges: "path", bfs: true }
            RETURN DISTINCT KEEP(v, "_key", "name")
    )
    RETURN { edges: eResults, vertices: vResults}
Run Code Online (Sandbox Code Playgroud)

查询结果,每条边和顶点只包含一次:

    [
      {
        "edges": [
          {
            "_from": "entities/198593",
            "_key": "391330",
            "_to": "entities/198603",
            "type": 300
          },
          {
            "_from": "entities/198593",
            "_key": "391390",
            "_to": "entities/198477",
            "type": 110
          },
          ...
        ],
        "vertices": [
          { "_key": "198603", "name": "A" },
          { "_key": "198477", "name": "B" },
          ...
        ]
      }
    ]
Run Code Online (Sandbox Code Playgroud)

如何通过一个查询获得相同的结果(唯一的顶点和唯一的边)?

PS:结果被包装在一个数组中,知道为什么吗?如何避免这种情况?

Dav*_*mas 1

你很接近...

通过这一行,FOR v,e您可以访问另一个变量p.

尝试这个:

    FOR v,e,p
        IN 1..2
        ANY "entities/198593"
        relations
        OPTIONS { uniqueEdges: "path", bfs: true }
        RETURN DISTINCT p
Run Code Online (Sandbox Code Playgroud)

编辑:如果您想删除重复的路径,这是可能的RETURN DISTINCT p,但我不确定如果您有uniqueEdges: "path".

看看这是否有帮助,如果没有,请发表回复,我们会看看我们能做些什么。