OrientDb - 获取节点及其所有关系
OrientDb - Get node and all of its relations
我可以做一个查询来实现顶点和他的所有边(包括其他顶点)吗?
现在我正在做多个查询来实现它:
获取顶点:
select from V where entity_name = 'SomeEntity'
然后遍历每条边 select 它:
select from #EDGE@rid // Multiple in the number of edges for this node
最后越过边缘并获得所有其他顶点(原始顶点除外)
select from #VERTEX@rid // Multiple in the number of vertexes in the edges
SELECT *,in(),out() FROM V WHERE entity_name = 'SomeEntity'
我使用以下方法从我的顶点获取所需深度的所有顶点和边:
TRAVERSE inE(), outE(), inV(), outV()
FROM (select from V where entity_name = 'SomeEntity')
WHILE $depth <= 2
一个观察;如果结构是一棵树,Dor Cohen 的答案是有效的。但是,如果是循环图,由于不访问已访问过的节点的节点访问策略,最长路径上的最后一条边会丢失。对我有用的解决方案如下:
从#22:1 遍历 out(), outE(),同时 $depth <= 4
查询遍历所有被视为渐进出顶点的节点,然后遍历渐进出所有顶点的边。
输出如下:
图的结构:
另一方面,如果使用上述查询方式(虽然我不是在顶点或边中查找),输出是:
错过了从#22:4 到#23:1 的边(作为记录),因为它落在较长的路径上。不过,在上述两个记录中都可以找到遗漏边缘 (#28:2) 的参考。
我可以做一个查询来实现顶点和他的所有边(包括其他顶点)吗?
现在我正在做多个查询来实现它:
获取顶点:
select from V where entity_name = 'SomeEntity'
然后遍历每条边 select 它:
select from #EDGE@rid // Multiple in the number of edges for this node
最后越过边缘并获得所有其他顶点(原始顶点除外)
select from #VERTEX@rid // Multiple in the number of vertexes in the edges
SELECT *,in(),out() FROM V WHERE entity_name = 'SomeEntity'
我使用以下方法从我的顶点获取所需深度的所有顶点和边:
TRAVERSE inE(), outE(), inV(), outV()
FROM (select from V where entity_name = 'SomeEntity')
WHILE $depth <= 2
一个观察;如果结构是一棵树,Dor Cohen 的答案是有效的。但是,如果是循环图,由于不访问已访问过的节点的节点访问策略,最长路径上的最后一条边会丢失。对我有用的解决方案如下:
从#22:1 遍历 out(), outE(),同时 $depth <= 4
查询遍历所有被视为渐进出顶点的节点,然后遍历渐进出所有顶点的边。
输出如下:
图的结构:
另一方面,如果使用上述查询方式(虽然我不是在顶点或边中查找),输出是:
错过了从#22:4 到#23:1 的边(作为记录),因为它落在较长的路径上。不过,在上述两个记录中都可以找到遗漏边缘 (#28:2) 的参考。