Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graph ArangoDB谱系图遍历_Graph_Arangodb - Fatal编程技术网

Graph ArangoDB谱系图遍历

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 | +-----+-----+-----

我有一个pedgree示例,其结构如图所示。 我的最终目标是以所谓的trio格式提取某些人的祖先,这是一个包含列
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