使用路径过滤进行AQL遍历

时间:2017-07-20 03:52:53

标签: arangodb aql

我在AQL(arangodb 3.1.22)中编写了一个图遍历查询,其中对于返回的一些路径,我在路径对象中得到一个顶点,该顶点没有连接到路径对象中返回的任何边(即边的_from / _to属性与顶点_id不匹配)。

我假设路径对象只返回该路径上的顶点和边缘。这是一个错误的假设吗?

1 个答案:

答案 0 :(得分:0)

如果将起点作为字符串传递,则遍历不存在任何顶点:

FOR v, e IN 1..10 OUTBOUND "nodes/non-existing-start" edges
    RETURN { vertex: v, _from: e._from, _to: e._to }

数据(集合nodes中的顶点和edges中的边):

non-existing-start
      |
      v
non-existing-1
      |
      v
non-existing-2
      |
      v
non-existing-3

它的作用是使用边缘索引遍历边缘(_from_to属性)。集合nodes必须存在,但不测试_from_to中引用的顶点是否实际存在于该集合中。查询结果为:

[
  {
    "vertex": null,
    "_from": "nodes/non-existing-start",
    "_to": "nodes/non-existing-1"
  },
  {
    "vertex": null,
    "_from": "nodes/non-existing-1",
    "_to": "nodes/non-existing-2"
  },
  {
    "vertex": null,
    "_from": "nodes/non-existing-2",
    "_to": "nodes/non-existing-3"
  }
]

如您所见,顶点为null,因此它们不存在。

删除顶点时,您可以使用托管图和general-graph模块delete edges connected to a vertex来确保一致性。