ArangoDB谱系图遍历

时间:2018-07-06 08:39:22

标签: graph arangodb

我有一个例子,显示了here所示的结构。 我的最终目标是提取所谓“三重奏”格式的某些人的祖先,该格式是带有列id mom dad的表。

在我的示例中,两个最近的人G和H的血统书的结果将是

+-----+-----+-----+
| id  | mom | dad |
+-----+-----+-----+
|  D  |  A  |  B  |
|  E  |  C  |  B  | 
|  G  |  D  |  E  |
|  H  |  F  |  E  |
+-----+-----+-----+

在AQL中我能想到的最接近的内容是以下查询。

LET last_generation = ['people/G', 'people/H']
FOR person IN last_generation
FOR v, e, p in 1..10 OUTBOUND person is_mom, is_dad
LET role = contains('mom', e._id) ? 'mom': 'dad'
SORT e._from DESC
RETURN DISTINCT {'id': DOCUMENT('people', e._from)._key,
                 'parent': DOCUMENT('people', e._to)._key,
                 'role': role}

虽然结果格式不正确,但后处理很容易。

现在我的问题是:

  1. 我被迫使用DISTINCT关键字来确保行的唯一性。但是,我想首先避免不必要的遍历,而不是进行筛选。理想情况下,我认为我需要选项uniqueEdges: "global",但不幸的是不再可用。例如,在处理完人G的血统书之后,我不想再遍历G和H(即人E及其父母)之间的血统书部分。无法使用uniqueVertices: "global",因为那样我会错过H --> E之间的优势。

  2. 是否有某种选择可以了解遍历期间的边缘收集类型,而不是使用我做的那种繁琐的检查?请注意,对我而言,将性别置于人的财产中是不可行的(这对大多数人而言是合理的),因为实际上我是在与植物打交道,而植物通常可以同时是父母。时间。

0 个答案:

没有答案