首先,对于笨拙的标题感到抱歉,我无法想出更好的曝光方式。
问题是我在单个匹配中查询密码时得到了不同的结果 - 结果和在匹配时将它分开---与---匹配---结果结构。
匹配---结果会跳过某些结果。
我的代码:
匹配---结果查询
match (up:U)-[r1:COCS]->(op:O)-[r2:CCLS]->(jp:J)-[r3:PRE]->(n:J{id:"AC"})<-[j2o:CCLS]-(o:O)<-[o2u:COCS]-(u:U)
return up,type(r1), op, type(r2), jp, type(r3), n, type(j2o), o, type(o2u), u
返回较少的结果(缺少与路径结构匹配的结果)。
匹配 - 匹配---匹配---结果查询
match (up:U)-[r1:COCS]->(op:O)-[r2:CCLS]->(jp:J)-[r3:PRE]->(n:J{id:"AC"})
with up, r1, op, r2, jp, r3, n
match(n)<-[j2o:CCLS]-(o:O)<-[o2u:COCS]-(u:U)
return up,type(r1), op, type(r2), jp, type(r3), n, type(j2o), o, type(o2u), u
返回正确的结果
我不明白为什么会这样。这对我没用。
我理解with的工作方式,两者都应该返回相同的结果。有人会抛光吗?
这是Neo4J 2.1.6 谢谢。
答案 0 :(得分:1)
我能想到对这种看似异常行为的解释。
引用neo4j manual:
在模式匹配时,Neo4j确保不包含匹配位置 在单个中多次找到相同的图形关系 图案。在大多数用例中,这是一件明智的事情。
在第一个查询中,以下子模式出现两次(在(n)
节点的两侧出现一次):
(:U)-[:COCS]->(:O)
由于第一个查询由单个模式组成,因此Cypher会阻止相同的COCS
关系在同一结果行中显示两次。在您的情况下,这会阻止某些行显示在结果中。
您的第二个查询拆分原始查询,以便上述子模式不再在单个模式中出现两次。因此,你得到了#34;完成&#34;结果
因此,这里的教训是:如果您使用重复关系子模式的模式,请确保您真的打算过滤掉同一关系实例多次出现的那些行。