繁体   English   中英

为什么此Arangodb查询最大深度不正确

[英]Why this Arangodb query max depth is not correct

我有一个普通的节点链接图

为了获得所有链接,我想获得与x最大深度有关的节点。 但是下面的查询返回了错误的结果(81个中的64个)。 但是它们之间的最大深度就像7。我在哪里出错了?

FOR v IN 0..14 ANY "Entity/41591987" EntityRelation 
OPTIONS {uniqueVertices: "global"} return v

编辑1:添加bfs:true选项似乎解决了问题,但我不明白为什么。


编辑2:我的完整查询是

   //get all the vertices related to this one id
    FOR v IN 0..9 ANY "EntityProd/58868489" EntityRelationProd 
    OPTIONS  {uniqueVertices: "global",bfs:true}
    //from each of above results, get the incoming and outgoing edges
    FOR vv, c IN ANY v EntityRelationProd RETURN c

关键是我已经获得了所有顶点的正确结果。 为什么“ uniqueVertices:全局”会影响我的第二部分? 还是我必须重新指定选项?

我认为问题是OPTIONS {uniqueVertices: "global"} 这将强制每个顶点最多访问一次。 因此,如果存在两条到达长度不同的顶点的路径,那么只有一条路径会被遍历,而另一条路径将被排除。 如果没有bfs: true的结果uniqueVertices: 'global' 具有确定性。

让我用以下示例进行说明。 我们按字母顺序有6个顶点:

(A) -> (B) -> (C) -> (D) -> (E) -> (F)

并且比起另一个顶点X添加了一个快捷方式:

(A) -> (X) -> (D)

现在让我们从(A)开始以1..3深度执行上述遍历。 A我们有两个选择,要么先选择B要么X 让我们选择X然后为该子图返回X, D, E 然后我们回到A并选择另一个选项。 那里我们有B, C 我们返回D因为它已经被访问过。 因此,在这种情况下,我们得到:结果是X, D, E, B, C

如果我们在A处选择另一个选项,结果将有所不同。 首先,我们找到B, C, D ,这仍然与另一个选择一致。 但是,如果我们继续在X搜索,那么麻烦就开始了。 在那里,我们选择X并查看D 不幸的是D已经返回,所以我们在这里停止。 因此,结果为: B, C, D, X E

如果使用bfs: true所有路径都将以升序深度进行分析。 因此,没有任何更短的途径可以到达上面示例中遇到的麻烦的任何顶点。 这里的结果是确定性的和定义明确的。

但是,您正在谈论实体之间的所有links 请注意,如果您说: uniqueVertices: 'global' ,则最多会有一个边指向您返回的任何实体(也基于遍历顺序选择)。 如果要在实体之间uniqueVertex所有边缘,则可能需要不使用uniqueVertex选项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM