首页 > 解决方案 > Neo4j 列表不在另一个列表查询中

问题描述

和节点具有Person关系类型。一个人可能喜欢很多餐馆。Restaurant(:Person)-[:LIKED]->(:Restaurant)

和节点具有Restaurant关系类型。一家餐厅可能位于多个城市。City(:Restaurant)-[:LOCATED_IN]->(:City)

和节点具有Person关系类型。一个人可能住在不止一个城市。City(:Person)-[:LIVES_IN]->(:City)

我想要person_name那些喜欢restaurant位于与city他们现在居住的地方不同的地方的人以及这些餐馆的列表,这是我的尝试:

MATCH (c:City)<-[LIVES_IN]-(p:Person)-[:LIKED]->(r:Restaurant)-[:LOCATED_IN]->(rc:City)
WHERE NOT c.city_name IN rc.city_name
RETURN p.person_name, collect(r.restaurant_name);

这没用。

标签: neo4j

解决方案


这应该这样做:

MATCH (c:City)<-[LIVES_IN]-(p:Person)
WITH p, COLLECT(DISTINCT c) AS personCities
MATCH (p)-[:LIKED]->(r:Restaurant)-[:LOCATED_IN]->(rc:City)
WHERE NOT rc IN personCities
RETURN p.person_name, collect(r.restaurant_name)

推荐阅读