【发布时间】:2016-08-23 11:14:16
【问题描述】:
我在 Cypher 和 Neo4j 中采取了一些步骤,并试图了解 cypher 如何处理“变量”。
具体来说,我有一个问题
match (A {name: "A"})
match (A)<-[:st*]-(C)-[:hp]->(c)
match (A)<-[:st*]-(B)-[:hp]->(b)
match (c)-[:st]->(b)
return b
这可以完成我想要的工作。现在,在代码中,我使用了 match 子句两次(第 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 个匹配子句视为一种整体模式?
感谢您对内部工作的任何洞察...
【问题讨论】: