Neo4j 所有功能与中断语句/打印节点在路径到一定条件



我想编写密码,我想打印路径中的节点到某个节点。在某个节点之后,我不想比较和打印节点。

例如

D{type:"fresh"} ---childOf--->C{type:"dirty"}----childOf---->B{type:"fresh"}-----childOf----->A{type:"fresh"}
G{type:"fresh"} ---childOf--->F{type:"fresh"}----childOf---->E{type:"dirty"}-----childOf----->A{type:"fresh"}

A 是根。

一(

我想要 o/

p,这样一旦我在任何列表中获得脏节点,我想停止比较和我的 o/p 是脏节点的路径。所以在这种情况下,o/p 是

c->B->A 

&

E->A

D 被删除,因为 C 是脏的F&G被移除,因为E是脏的。

b( 在第二种情况下,我也不想要脏节点,所以 o/p 更改为

B->A

& 一个

注意:在这两种情况下,根可能是脏的,仍然 o/p 应该保持不变。所以换句话说,根的类型并不重要。O/p 与根的类型无关。

没有办法使用 Cypher 完成您想要的(当您点击此属性时停止遍历,同时忽略开始节点(。我所知道的所有解决方案都将超越"脏"节点,需要过滤,这可能对你有用,因为它们会给出正确的答案,即使遍历不是最有效的。

假设您使用 :Node 作为标签,并使用字母作为名称属性,并且您在 :Node(name( 上有一个索引来快速查找启动节点,则此查询应该有效:

MATCH path=(:Node{name:'A'})<-[:childOf*]-({type:'dirty'})
WITH path
WHERE single(node in tail(nodes(path)) WHERE node.type = 'dirty')
RETURN nodes(path)[..-1] as nodes

如果可以选择使用 :D irty 标签而不是属性,那么有一种方法可以使用 APOC 过程执行此操作,一旦我们到达具有相关标签的节点,就会停止遍历。

最新更新