[英]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.