Arangodb遍历包括头顶点

时间:2016-01-13 15:23:20

标签: graph arangodb

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

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

结果是一个空列表:[]

有没有办法可以保证起始节点在列表中?通过示例列表来隔离哪些是树的头部将是一种痛苦。

1 个答案:

答案 0 :(得分:0)

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

[{_id:pmsite/14419285155}],

缺少pmsite/14419285155周围的引号。

此查询真正做的是通过ID pmsite将集合14419285155分配(可能是计数)并将其作为{_id: divcount}输入。

如果添加缺少的引号,查询应该完全按照您的要求执行。 (编辑:原始查询中存在引号,修复了帖子。)

提示: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()
[ ]

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