如何编写一个cypher语句来找出我想要的第一个匹配节点

时间:2015-08-25 15:58:38

标签: neo4j cypher

我有这样的节点:

 (a {export:true})->(b {export:false})->(c {export:false})->
 .....some other nodes with export field is false->
 (d {export:true})->(e {export:true})

现在我只想找出a和d,它们有关系

(a {export:true})-->(b {expor:true})

我写了一些密码语句,但是无法工作,它们将返回a-> d和a-> e。有人知道如何编写一个可以像我想要的那样工作的密码语句吗?

谢谢你

1 个答案:

答案 0 :(得分:0)

答案A

以下查询返回由0个或更多节点分隔的所有连接的export:true节点对,这些节点都包含export:false

MATCH p=(a { export:true })-[*]->(b { export:true })
WHERE
  LENGTH(p) = 1 OR
  ALL (x IN NODES(p)[1..LENGTH(p)-1] WHERE NOT x.export)
RETURN a, b;

注意:LENGTH(p)会返回路径p中的关系数。

答案B

通过删除Answer A测试

,实际上可以简化{p> LENGTH(p) = 1
MATCH p=(a { export:true })-[*]->(b { export:true })
WHERE ALL (x IN NODES(p)[1..LENGTH(p)-1] WHERE NOT x.export)
RETURN a, b;

但为什么这个简化的查询也有效,需要更多的解释。如果LENGTH(p)为1,则:

  1. NODES(p)[1..0]会产生[]
  2. ALL(x IN [] WHERE ...)会产生true(无论...是什么)。