OrientDB中如何获取关联顶点及含边的完整路径?
解决OrientDB完整路径查询的问题
嘿,我明白你现在的困扰——想从"giggs"出发拿到完整的关联路径,包括所有中间节点和边,但当前查询只返回了最终节点对吧?咱们来调整下MATCH语句,让它能输出你需要的完整路径信息。
核心修正思路
问题出在你原来的查询没有明确绑定整个遍历路径,导致返回的结果只捕获了最终节点。OrientDB的MATCH语法支持用变量绑定完整路径,这样就能保留所有中间节点和关联边的信息。
修正后的查询语句
MATCH p = {class: ic, as: start, where: (title = 'giggs')} .(outE({where: 'some condition'}).inV().inE({where: 'some condition'}).outV())*{ while: $depth <= 5, where: $matched.start != $currentMatch } RETURN p AS full_path
语句细节解释
p =:把整个遍历路径绑定到变量p上,这样返回p时就能拿到路径上的所有节点和边。.(...)*:用*重复执行你定义的边-节点遍历模式(outE->inV->inE->outV),配合while: $depth <=5控制最大遍历深度。where: $matched.start != $currentMatch:避免遍历过程中循环回到起始节点"giggs"。
更灵活的输出方式
如果你想单独提取路径中的节点标题或边的属性,可以用下面的查询,结果会更直观:
MATCH p = {class: ic, as: start, where: (title = 'giggs')} .(outE({where: 'some condition'}){as: edge}.inV(){as: node}.inE({where: 'some condition'}){as: edge2}.outV(){as: node2})*{ while: $depth <=5, where: $matched.start != $currentMatch } RETURN [node IN nodes(p) | node.title] AS path_node_titles, [edge IN edges(p) | edge.your_edge_property] AS path_edge_details, p AS complete_path
这里nodes(p)会返回路径上的所有节点,edges(p)返回所有关联边,你可以根据自己的需求调整提取的属性。
这样调整后,你就能拿到像"giggs"->"192.168.0.1"->"ronaldo"->"192.168.0.2"->"veri"这样的完整路径,以及每个节点和边的详细信息啦!
内容的提问来源于stack exchange,提问作者Giggs
相关产品推荐
相关产品推荐

