我修改了this console中的“vanilla”初始查询,并在“Morpheus”和“Cypher”节点之间添加了一种关系类型“LOCKED”。

如何修改现有的(首次运行)查询,该查询是可变长度的路径,因此由于我添加了附加的Locked关系,它不再到达Agent Smith节点?

首次运行查询:

MATCH (n:Crew)-[r:KNOWS|LOVES*2..4]->m
WHERE n.name='Neo'
RETURN n AS Neo,r,m

我已经尝试过这种事情:
MATCH p=(n:Crew)-[r:KNOWS|LOVES*2..4]->m
WHERE n.name='Neo'
AND none(rel IN rels(p) WHERE EXISTS (StartNode(rel)-[:LOCKED]->EndNode(rel)))
RETURN n AS Neo,r,m

..但是它无法识别none()函数中的模式。

我正在使用社区2.2.1

谢谢阅读

最佳答案

我很确定您不能在MATCH y类型子句中使用这样的函数(尽管它很聪明)。那这个呢?

MATCH path=(neo:Crew)-[r:KNOWS|LOVES|LOCKED*2..4]->m
WHERE neo.name='Neo'
AND NOT('LOCKED' IN rels(path))
RETURN neo,r,m

编辑:

糟糕,看来Dave可能击败了我。无论如何,这是我想出的解决方案;)
MATCH p=(neo:Crew)-[r:KNOWS|LOVES*2..4]->m
WHERE neo.name='Neo'
WITH p, neo, m
UNWIND rels(p) AS rel
MATCH (a)-[rel]->(b)
OPTIONAL MATCH a-[locked_rel:LOCKED]->b
WITH neo, m, collect(locked_rel) AS locked_rels
WHERE none(locked_rel IN locked_rels WHERE ()-[locked_rel]->())
RETURN neo, m

08-04 12:51