如何查询以某个vertex为终点的路径

需求是给定vertex的VID,查询N跳内的所有vertex和path,但是和这个vertex有相同tag的点我不需要
目前做法使用GO查询以其为起点的终点,再用FIND path查询两点间的path 语句如下

GO 1 TO 10 STEPS FROM “host001” OVER * YIELD dst(EDGE) as Destination | FIND ALL PATH FROM “host001” TO $-.Destination OVER * YIELD PATH as p
这样对于OUT方向是可以的,但同时我又想要IN方向,试了用BIDIRECT,但这样的问题是会查出来和vertex有相同tag的点和边

也试了用SUBGRAPH, 但是同样的问题,会查到和vertex有相同tag的点和边

有办法能查出以给定vertex为终点的节点和边吗,这样我把前后的结果合并就可以了;

整张图大致如下,比如给出青绿色的frontPoort002, 我需要向OUT方向查找知道最后的粉红色节点,但对于IN方向我只需要查到左侧4个红点,和frontPort001相关的那些不需要

这个太定制化了,没有对应的ngql

不能用 go 语句,是因为 go 多步的 filter 语义问题。

MATCH p=(v)-[*1..10]-(m) 
where id(v)=="host001" and all( midNode in [n in nodes(p) where id(n)<>id(v)  | n] where "frontPort" not in tags(midNode))
RETURN p
1 个赞

感谢,基于你的改进了一下,加了出入方向

MATCH p=(v)-[*1…10]->(m) WHERE id(v)==“host001” and all( midNode in [n in nodes(p) where id(n)<>id(v) | n] where “host” not in tags(midNode)) RETURN p
UNION
MATCH p=(v)<-[*1…10]-(m) WHERE id(v)==“host001” and all( midNode in [n in nodes(p) where id(n)<>id(v) | n] where “host” not in tags(midNode)) RETURN p

这样写的话似乎where中的第二个条件也可以去掉了直接

MATCH p=(v)-[*1…10]->(m) WHERE id(v)==“host001” RETURN p,StartNode, id(endNode(p)) as EndNode, length(p) as PathLength
UNION
MATCH p=(v)<-[*1…10]-(m) WHERE id(v)==“host001” RETURN p,StartNode, id(endNode(p)) as EndNode, length(p) as PathLength

再继续问一个问题,这样的话我能分别计算 出和入方向上最长的边,那如果我想要计算出+入整条path的长度,找出最长的,有办法做到吗

MATCH p=(n)<-[*1..2]-(v)-[*1..2]->(m)  
where id(v)=="host001" and all( midNodeTags in [n in nodes(p) where id(n)<>id(v)  | labels(n)] where not "host" in midNodeTags) 
with p,length(p) as len return p ,len order by len desc limit 10 

这样不行,会一个都查不出来,改了[*1…2]为[*1…10]也不行

不应该的啊

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。