我想说要找到我住的地方的购物者。
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);
答案 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)