Neo4J Cypher复杂查询

时间:2018-09-08 21:43:29

标签: python database graph neo4j cypher

image of the problem 我在图像中有以下情形:红色节点为主题,黄色节点为课程名称。我需要找到属于课程CS201的最后一个主题。在此示例中,这应该是主题“ Array”。我无法将其转换为密码查询语言。我已经尝试过了:

MATCH (n:course)-[:isPartOf]->(x:label) where not x.name contains 'CS201' return n

这应该给我主题“指针”,因为它不包含CS201,然后我以为我会退后一步到达主题“数组”,但是它不起作用。

graph image

2 个答案:

答案 0 :(得分:0)

我认为您混淆了方向和名称。

MATCH (course:course)<-[:isPartOf]-(topic:label)<-[:hasPreq]-(prevTopic:label) 
where course.name contains 'CS201' 
return topic, prevTopic

为什么您有重复的课程条目? 您可能没有在创建数据时使用MERGE。

答案 1 :(得分:0)

保留

使用此密码:

MATCH (c:course {name: 'CS201'})<-[:isPartOf]-(t:topic)
OPTIONAL MATCH path=((t)-[:next*]->(:topic)-[:isPartOf]->(c))
RETURN t, count(relationships(path)) AS count_rels
ORDER BY count_rels

但是它将返回数组和指针为secondTopic,就像@Michael Hunger在他的回答中说的那样,您有重复的CS201课程,请尝试独特的约束,read docs

CREATE CONSTRAINT ON (course:course) ASSERT course.name IS UNIQUE