我有一个可以具有以下关系的节点(:Person)。
我正在尝试编写一个密码查询,该查询返回所有事件
(me:Person)-[:ATTEND]->(gig:Event)(me:Person)-[:LIKE]->(a:Artist)-[:PERFORMS]->(gig:Event)(me:Person)-[:LIKE]->(h:Host)-[:HOSTING]->(gig:Event)我尝试使用类似的查询match (me {emailId: 'abc@xyz.com'})-[attend:ATTEND]->(gig), (me)-[:LIKE]->(n)-[:PERFORM|HOSTING]-(gig2) return gig,gig2,但是如果匹配子句的第一部分(与 :ATTEND 关系匹配)具有非 null 结果,则这只返回所需的结果。例如,如果用户没有参加任何活动,但有他/她喜欢的艺术家和主持人,那么我会假设查询仍然根据第二个 MATCH 子句返回结果,但这并没有发生。
我在这里缺少什么?
- 谢谢,密码核
如果MATCH没有返回任何内容,那么查询就会停止,这就是出现问题的原因。解决方案是OPTIONAL MATCH,如果返回为空,则不会停止。您可以尝试将查询更改为此,因此无论用户是否参加演出,如果他喜欢在演出中表演的艺术家,您都会得到结果。
optional match (me {emailId: 'abc@xyz.com'})-[attend:ATTEND]->(gig),
(me)-[:LIKE]->(n)-[:PERFORMS|HOSTING]-(gig2) return gig,gig2
Run Code Online (Sandbox Code Playgroud)