Arangodb 遍历以包含头部顶点

Arangodb traversal to include head vertex

我正在使用 GRAPH_TRAVERSAL 获取从节点列表到树头的路径。这非常有效,除非示例恰好是树的头部。在这种情况下,edgeCollection 没有此对象的入站条目,因此它不会出现在结果中。

FOR v IN GRAPH_TRAVERSAL('gdp2',
                         [{_id:'pmsite/14419285155'}],
                         'inbound',{edgeCollection:'child'})
       RETURN v

结果是一个空列表:[]

有什么办法可以保证起始节点在列表中吗?通过示例列表来区分哪些位于树的头部是一件很痛苦的事情。

问题出在查询本身。它包含一个难以发现的细微错误:

[{_id:pmsite/14419285155}],

缺少 pmsite/14419285155 周围的引号。

这个查询真正做的是通过 id 14419285155 划分(可能是计数)集合 ​​pmsite 并将其作为 {_id: divcount}.

如果添加遗漏的引号,查询应该完全符合您的要求。 (编辑:原始查询中存在引号,修复了 post。)

提示:db._explain() 提供了相关信息。

正在尝试重现,使用 knows sample graph

arangosh> var examples = require("org/arangodb/graph-examples/example-graph.js");
arangosh> var g = examples.loadGraph("knows_graph");


arangosh> db._query("FOR e IN GRAPH_TRAVERSAL('knows_graph', [{_id: 'persons/eve'}], 'inbound', {edgeCollection: 'knows'}) return e").toArray()
[ 
  [ 
    { 
      "vertex" : { 
        "_id" : "persons/eve", 
        "_rev" : "1405497100114", 
        "_key" : "eve", 
        "name" : "Eve" 
      } 
    } 
  ] 
]

然而,创建有点类似行为的是使用不属于图形定义的集合:

arangosh> db._create("othercol")
arangosh> db.othercol.save({_key: "1" })
arangosh> db._query("FOR e IN GRAPH_TRAVERSAL('knows_graph', [{_id: 'othercol/1'}], 'inbound', {edgeCollection: 'knows'}) return e").toArray()
[ ]

正如评论中所指出的,边缘关系是有方向的。如果你想让边指向两个方向,你需要在另一个方向上创建第二个关系。不完全填充边缘定义的边缘可能会被忽略。