我有这样的节点:
(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。有人知道如何编写一个可以像我想要的那样工作的密码语句吗?
谢谢你
答案 0 :(得分:0)
以下查询返回由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
中的关系数。
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,则:
NODES(p)[1..0]
会产生[]
和ALL(x IN [] WHERE ...)
会产生true
(无论...
是什么)。