Graph ArangoDB谱系图遍历
我有一个pedgree示例,其结构如图所示。 我的最终目标是以所谓的trio格式提取某些人的祖先,这是一个包含列Graph ArangoDB谱系图遍历,graph,arangodb,Graph,Arangodb,我有一个pedgree示例,其结构如图所示。 我的最终目标是以所谓的trio格式提取某些人的祖先,这是一个包含列id mom dad的表 在我的例子中,最近两个人G和H的谱系结果是 +-----+-----+-----+ | id | mom | dad | +-----+-----+-----+ | D | A | B | | E | C | B | | G | D | E | | H | F | E | +-----+-----+-----
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个人及其父母)之间共享的血统部分。使用唯一顶点:“global”
不是一个选项,因为这样我就会错过H-->E
之间的边缘1.您提出的查询是否存在性能问题?2.通过边缘收集类型,您是指收集名称
为_mom
和为_dad
,这会告诉您性别吗?@CoDEmanX 1。是的,这是一个性能问题,因为当我的上一代数组中只有重复的ID时,例如['people/g','people/g','people/g']
,查询运行时会线性增加,因为遍历是不必要的重复,尽管输出保持不变。2.是的,我指的是性别,但问题的这一部分并不重要。因为没有属性告诉性别,所以确定集合名称的正确方法是PARSE\u IDENTIFIER(e.\u id).collection
。