NebulaGraph中FIND PATH子句是否支持WHERE子句及写法咨询
NebulaGraph中
FIND PATH子句的WHERE子句支持情况及正确写法 问题背景
FIND PATH是NebulaGraph中实用的图遍历语句,基础用法示例如下:
FIND SHORTEST PATH FROM "player102" TO "team204" OVER * YIELD path AS p;
但遍历过程中常需用WHERE子句添加过滤条件,官方手册未提供相关写法示例与语法说明,导致部分语句可正常执行,部分报错:
可正常执行的语句示例
FIND ALL PATH FROM "player100" TO "team204" OVER * WHERE follow.degree is EMPTY or follow.degree >=0 YIELD path AS p;
执行结果:
+------------------------------------------------------------------------------+ | p | +------------------------------------------------------------------------------+ | <("player100")-[:serve@0 {}]->("team204")> | | <("player100")-[:follow@0 {}]->("player125")-[:serve@0 {}]->("team204")> | | <("player100")-[:follow@0 {}]->("player101")-[:serve@0 {}]->("team204")> | |... | +------------------------------------------------------------------------------+
报错语句示例
FIND ALL PATH FROM "player100" TO "team204" OVER * where player.age is EMPTY or follow.degree >=0
执行时触发语法错误
解答
FIND PATH子句支持WHERE子句,但有明确使用限制
NebulaGraph的FIND PATH语句中,WHERE子句仅能针对边的属性进行过滤,无法直接过滤顶点属性(报错语句中player.age属于顶点属性,这是不被支持的)。此外,FIND PATH搭配WHERE时必须同时使用YIELD子句,缺少该子句也会触发语法错误。正确写法规则
- 仅能引用边类型的属性,格式为
[边类型名].[属性名],例如follow.degree - 必须搭配
YIELD子句返回结果 - 过滤条件需符合NebulaGraph表达式语法,比如判断空值用
IS EMPTY,数值比较用>=等
修正后的正确示例
FIND ALL PATH FROM "player100" TO "team204" OVER * WHERE follow.degree IS EMPTY OR follow.degree >= 0 YIELD path AS p;
若需过滤顶点属性的替代方案
如果需要同时过滤顶点属性,建议使用MATCH语句实现路径查找与过滤,示例:
MATCH p=("player100")-[*]->("team204") WHERE ALL(n IN nodes(p) WHERE n.age IS NOT EMPTY OR n.age >= 0) AND ALL(e IN relationships(p) WHERE e.degree IS EMPTY OR e.degree >= 0) RETURN p;
内容的提问来源于stack exchange,提问作者user13726945
相关产品推荐
相关产品推荐

