В ArangoDB AQL, как вернуть вершины и ребра из обхода графа? - PullRequest
0 голосов
/ 12 апреля 2019

Я хочу вернуть список всех уникальных ребер и всех уникальных вершин, встреченных во время запроса обхода графа.Это дает мне именно тот результат, который я хочу, но я выполняю один и тот же запрос дважды:

    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}

Результат запроса, содержащий каждое ребро и вершину ровно один раз:

    [
      {
        "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" },
          ...
        ]
      }
    ]

Какможно ли достичь одного и того же результата (уникальные вершины и уникальные ребра) одним запросом?

PS: результаты упакованы в массив, есть идеи, почему?Как этого избежать?

1 Ответ

0 голосов
/ 13 апреля 2019

Вы близки ...

С помощью строки FOR v,e у вас есть доступ к еще одной переменной, p.

Попробуйте:

    FOR v,e,p
        IN 1..2
        ANY "entities/198593"
        relations
        OPTIONS { uniqueEdges: "path", bfs: true }
        RETURN DISTINCT p

Редактировать: Возможно RETURN DISTINCT p, если вы хотите удалить дубликаты путей, но я не уверен, как вы получите дубликаты путей, если у вас есть uniqueEdges: "path".

Посмотрите, поможет ли это, еслинет, оставьте ответ, и мы посмотрим, что мы можем сделать.

...