在OrientDB和pyorient上执行同一命令时,得到不同的结果。在OrientDB中使用outE().inV()
函数会导致图形的完整遍历,而在pyorient中,它只会返回第一个顶点。
使用以下查询查询图形(位于上面的链接中)时:
traverse outE('has_component').inV()
from
(select expand(rid) from index:part.part_id where key = 'A')
maxdepth 2 strategy breadth_first
使用OrientDB Studio,可以获得所需的结果,它基本上是整个图形的遍历。但是当我在pyorient中使用此命令时:
cmd = """
traverse outE('has_component').inV()
from
(select expand(rid) from index:part.part_id where key = 'A')
maxdepth 2 strategy breadth_first
"""
r = client.query(cmd, -1)
我只得到根节点(即“ A”)。它不会遍历整个图形。如何让pyorient像OrientDB Studio一样工作?
我知道我可以使用out()
而不是outE().inV()
遍历图形
但我想通过在边的参数上施加条件来限制遍历:
outE(<edge-class-name>)[<condition-on-edge-parameters>].inV()
这就是为什么我以这种方式进行遍历。当我使用out()
时,遍历在pyorient中正常工作。