Neo4j获得多个父母的子节点

时间:2014-12-22 22:54:49

标签: neo4j cypher

我刚刚开始使用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 

谢谢。

1 个答案:

答案 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开头的歌曲。