我有一个例子,显示了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}
虽然结果格式不正确,但后处理很容易。
现在我的问题是:
我被迫使用DISTINCT
关键字来确保行的唯一性。但是,我想首先避免不必要的遍历,而不是进行筛选。理想情况下,我认为我需要选项uniqueEdges: "global"
,但不幸的是不再可用。例如,在处理完人G的血统书之后,我不想再遍历G和H(即人E及其父母)之间的血统书部分。无法使用uniqueVertices: "global"
,因为那样我会错过H --> E
之间的优势。
是否有某种选择可以了解遍历期间的边缘收集类型,而不是使用我做的那种繁琐的检查?请注意,对我而言,将性别置于人的财产中是不可行的(这对大多数人而言是合理的),因为实际上我是在与植物打交道,而植物通常可以同时是父母。时间。