排除Neo4J中匹配查询返回的一些结果

排除Neo4J中匹配查询返回的一些结果,neo4j,cypher,Neo4j,Cypher,我正在使用下面的匹配查询(指阅读书籍的用户): 此密码首先匹配id=15的用户审阅的书籍。然后,它使用另一个MATCH命令来查找任何其他用户,这些用户已经审阅了id=15的用户审阅过的任何书籍。但是,返回的用户也包括id=15的用户。我怎样才能排除他 请注意,我使用了'distinct'命令,以便不会获得相同的用户2次或更多次。F.e.如果用户(id=15)已经审阅了2本书,而另一个用户也审阅了这2本书,我将得到最后一个用户2次,没有“distinct”。您只需要在第二个匹配中添加where子句

我正在使用下面的匹配查询(指阅读书籍的用户):

此密码首先匹配id=15的用户审阅的书籍。然后,它使用另一个MATCH命令来查找任何其他用户,这些用户已经审阅了id=15的用户审阅过的任何书籍。但是,返回的用户也包括id=15的用户。我怎样才能排除他


请注意,我使用了'distinct'命令,以便不会获得相同的用户2次或更多次。F.e.如果用户(id=15)已经审阅了2本书,而另一个用户也审阅了这2本书,我将得到最后一个用户2次,没有“distinct”。

您只需要在第二个匹配中添加where子句,排除与匹配的第一个用户相同的用户

MATCH (u:User{id:15})-[r:REVIEW]->(b:Book)
with u,b
MATCH (t:User)-[r:REVIEW]->(b)
WHERE t <> u
RETURN distinct t
MATCH(u:User{id:15})-[r:REVIEW]->(b:Book)
与u,b
匹配(t:用户)-[r:审核]->(b)
你在哪里
返回不同的t

另一个选项是在单个模式中捕获所需内容,如下所示:

MATCH (u:User{id:15})-[:REVIEW]->(b:Book)<-[:REVIEW]-(t:User)
RETURN distinct t

两个答案都很完美!非常感谢。由于新帐户的原因,我无法对其中任何一个进行投票。这两个答案都非常有效!非常感谢。由于新帐户的原因,我无法对他们进行投票。
MATCH (u:User{id:15})-[:REVIEW]->(b:Book)<-[:REVIEW]-(t:User)
RETURN distinct t
MATCH (u:User{id:15})-[:REVIEW*2]-(t:User)
RETURN distinct t