如果我有 2 个顶点 V1 和 V2。哪种方法为我提供了这两个顶点的直接边缘阵列黑白。
集合 c
V1 = {"名称": "a"}
V2 = {"名称": "b"}
边 e
E1 = (V1, V2, {"count": 1})
现在,我再次添加 V2(即它具有相同的键)。首先,我想快速获得 E1。理想情况下,我在想如果我们在阿兰戈德有类似的东西
edgeList = db.e.edges(v1, v2);
它应该返回边缘数组 b/w v1 和 v2。
我正在寻找这个数据库的最佳实践。
再次添加 V2 后,E1 将如下所示:
E1 = (V1, V2, {"count" : 2})
您可以使用以下 AQL 方法来解决此问题:
-
GRAPH_SHORTEST_PATH
返回GRAPH_SHORTEST_PATH("yourGraph", "V1_ID", "V2_ID", {direction : "any"})
这将返回这些边之间的短路径,如果长度为 1,则在 V1 和 V2 之间有直接边
- GRAPH_EDGES
返回GRAPH_EDGES("yourGraph", "V1_ID", {maxDepth : 1, direction : "any"})
这将返回所有传入和传出边,V1 的最大深度为 1,只需过滤 V2 的结果
我仍然不确定你的目标是什么。 请注意,当您创建新顶点(在示例 V2 中)时,顶点 id 是新创建的,因此不在任何现有的边中。请描述你到底想做什么,我会尽量给你一个最佳实践的例子
好的,我检查了这个,暂时你必须调用一个 AQL 来检查 2 个顶点之间的现有边:
db._query("FOR i in GRAPH_EDGES("yourGraphName",v1,{neighborExamples : v2}) RETURN i").toArray();
我们很快就会在 2.3.1 中提供一种更方便的方法,它将在图形模块中,可以像这样使用:
// get an instance of the graph Module
var graphModule = require("org/arangodb/general-graph");
// load your graph
var graph = graphModule._graph("yourGraphName");
// get an array of edges between v1 and v2
graph._getConnectingEdges(v1, v2)
在 ArangoDB v.3 中,您可以检索所有边缘(在边缘集合 e1 中,...eN) 在两个顶点 V1 和 V2 之间,如下所示:
FOR v, e IN 1..1 ANY V1 e1 ... eN
FILTER v == V2
RETURN e
如果您只想要一个计数,而不是像上面那样计算数组,那么将上面的最后一行替换为以下值会更有效:
COLLECT WITH COUNT INTO c
RETURN c
添加 V2
再次添加 V2 后
从字面上看,这在ArangoDB中似乎没有任何意义。也许你的意思是增加另一个优势?