我正在使用GRAPH_TRAVERSAL来获取从节点列表到树头的路径。除非示例恰好是树的头部,否则这种方法很有效。在这种情况下,edgeCollection没有此对象的入站条目,因此它不会出现在结果中。
FOR v IN GRAPH_TRAVERSAL('gdp2',
[{_id:'pmsite/14419285155'}],
'inbound',{edgeCollection:'child'})
RETURN v
结果是一个空列表:[]
有没有办法可以保证起始节点在列表中?通过示例列表来隔离哪些是树的头部将是一种痛苦。
答案 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()
[ ]
正如评论中所指出的,边缘关系有一个方向。如果要使边指向两个方向,则需要在另一个方向上创建第二个关系。边缘定义未完全填充的边缘可能会被忽略。