我正在Cypher和Neo4j采取一些步骤,并试图了解密码如何处理“变量”。
具体来说,我有一个查询
match (A {name: "A"})
match (A)<-[:st*]-(C)-[:hp]->(c)
match (A)<-[:st*]-(B)-[:hp]->(b)
match (c)-[:st]->(b)
return b
完成我想要的工作。现在,在代码中我使用了两次匹配子句(第2行和第3行),因此变量(c)和(d)在第4行的最终匹配之前基本上包含相同的节点。 我可以编写查询而不必重复第二个匹配子句吗?使用
match (A {name: "A"})
match (A)<-[:st*]-(B)-[:hp]->(b)
match (b)-[:st]->(b)
return b
似乎是非常不同的东西,因为没有:从(b)中的节点到它自身的st类型关系,所以什么都不返回。到目前为止,我的理解是,即使(b)和(c)包含相同的节点,
match (c)-[:st]->(b)
尝试在(c)的任何节点和(b)的任何节点之间找到匹配,而
match (b)-[:st]->(b)
尝试从(b)的特定节点找到匹配到自身?或者是否必须将3匹配条款视为整体模式?
Thanx对内部工作有任何见解......