我以前在2.1.x中运行的查询工作正常,已停止在2.2.x中运行
创建对象:
Create (n:Test {val:"n"})-[:CONNECTION]->(o:Test {val:"o"})-[:CONNECTION]->(p:Test {val:"p"})
在2.1.8中,如果我运行此查询(请注意MATCH
子句的顺序):
MATCH (n:Test)-[:CONNECTION*1..2]-(p:Test),(p)-[:CONNECTION*1..2]-(o:Test)
Where(n.val = 'n')
and(o.val = 'o')
and(p.val = 'p')
return n,o,p
我收到回复。
如果我在2.2.x中运行查询,则无法获得结果。
这是打算吗?在我看来,由于我没有在查询上指示方向,它应该能够来回跳转,并且每个-[:CONNECTED]-
应该能够看到两种方式,而不管它是否先前访问过一个节点。 / p>
答案 0 :(得分:1)
有趣!
为此,我重新制定了你的查询,以便它在2.2.0下工作:
.positionDivs div:nth-child(3n-1){
/* CSS Properties */
}
我只是将您的MATCH (n:Test {val: 'n'})-[:CONNECTION*1..2]-(p:Test {val: 'p'})
WITH n,p
MATCH p-[:CONNECTION*1..2]-(o:Test {val:'o'})
RETURN n,p,o;
条件移动到匹配中,然后使用WHERE
块来绑定WITH
,以明确表示您的p
第一场比赛与第二场比赛相同。
您的第一个查询的方式有点含糊不清。因为您使用p
,所以与:CONNECTION*1..2
节点的匹配可以一直到您正在使用值“o”创建的节点。几乎像cypher正在做一个贪婪的比赛(两个CONNECTION跳,而不是一个)。在那种条件下,第二场比赛无法奏效,你什么也得不到。
我无法阐明为什么在2.2.0下这种行为会比早期版本有所不同,但是我可以看到你的查询表达有点时髦,并且如上所述重新制作是正确的,并且是也更容易理解。