我刚刚开始使用neo4j而且我遇到了一个问题。在这里似乎没有解决这个问题,但我可能也会错误地措辞。我正在建立一个对音乐进行分类的小网站。有多个歌曲节点与流派节点有BELONGS_TO
关系。如何获取属于一组用户指定类型的每首歌曲。
例如。 Song1,Song2,Song3都属于Pop和Electronic。 Song4刚属于Pop。我如何查询以获得属于Pop和Electronic的每首歌?在这种情况下,Song1,Song2,Song3。
我一直在努力解决这个问题。这是我到目前为止所做的,但它没有任何回报。如果我将AND
替换为OR
,我会收到属于其中一种类型的所有歌曲。
MATCH (n:Song)-[r:BELONGS_TO]->(Genre)
WHERE (n)-[r]->(Genre{name:"Pop"}) AND (n)-[r]->(Genre{name:"Electronic"})
RETURN n
谢谢。
答案 0 :(得分:2)
您应该在WHERE
子句中实际执行的MATCH
子句中尝试做什么。你走了:
MATCH (g1:Genre {name: "Pop"})<-[:BELONGS_TO]-(popElectronicSongs:Song)-[:BELONGS_TO]->(g2:Genre {name: "Electronic"});
RETURN popElectronicSongs;
你可以在MATCH
子句中实际做很多事情,你可以在这里看到。 WHERE
位通常用于基于各种谓词进行过滤。例如,您可以说WHERE popElectronicSongs.title =~ /S.*/
仅过滤名称以S开头的歌曲。