ArangoDB 快速 api,用于了解 2 个文档键是否有边缘



如果我有 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 方法来解决此问题:

  1. GRAPH_SHORTEST_PATH

    返回GRAPH_SHORTEST_PATH("yourGraph", "V1_ID", "V2_ID", {direction : "any"})

这将返回这些边之间的短路径,如果长度为 1,则在 V1 和 V2 之间有直接边

  1. 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中似乎没有任何意义。也许你的意思是增加另一个优势?

最新更新