neo4j 212 cypher没有导航先前导航的路径

时间:2014-07-11 07:13:06

标签: neo4j cypher

我想说要找到我住的地方的购物者。

match (s:Shopper {id:"yy35575"})-[:DELIVERY_TO]->(:ZipCode)-[:IS_IN]->(:City)<-[:IS_IN]-(:ZipCode)<-[:DELIVERY_TO]-(s2:Shopper) return count (s2);

这返回38,它似乎排除了我留下的邮政编码中的购物者。

如果我这样做,我会得到正确答案44.是否存在默认行为,例如不导航我已经导航的内容,以及如何覆盖它,就像我们以前在遍历中所做的那样

match (s:Shopper {id:"yy35575"})-[:DELIVERY_TO]->(:ZipCode)-[:IS_IN]->(c:City) with c match (c)<-[:IS_IN]-(:ZipCode)<-[:DELIVERY_TO]-(s2:Shopper) return count (s2);

1 个答案:

答案 0 :(得分:2)

是的,它与已经遍历的关系不匹配,但在您的情况下,您的第一个查询不必要很长。 没有必要在城市中找到两次邮政编码,除非你在返回声明中需要来自城市的东西,否则城市对查询“找到我住的地方的购物者”没有任何价值。

最佳改写为:

match (s:Shopper {id:"yy35575"})-[:DELIVERY_TO]->(zip:ZipCode)
with zip
match (s2:Shopper)-[:DELIVERY_TO]->(zip)
where s<>s2
return count(s2)