Neo4J Cypher Complex Query - PullRequest
       42

Neo4J Cypher Complex Query

0 голосов
/ 09 сентября 2018

изображение проблемы У меня на изображении следующий сценарий: красные узлы - это темы, желтые узлы - названия курсов. Мне нужно найти последнюю тему, которая относится к курсу CS201. В этом примере это должна быть тема «Массив». Я не могу превратить это в зашифрованный язык запросов. Я пробовал:

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

Это должно дать мне тему «Указатель», так как она не содержит CS201, а затем я подумал, что вернусь на шаг назад, чтобы перейти к теме «Массив». Однако она не работает.

graph image

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

на удержании

Используйте этот шифр:

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 курса, попробуйте уникальные ограничения, прочитайте документы :

CREATE CONSTRAINT ON (course:course) ASSERT course.name IS UNIQUE
0 голосов
/ 09 сентября 2018

Я думаю, вы перепутали направление и имена.

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

Почему у вас есть дубликаты записей для курсов? Вы, вероятно, не использовали MERGE для создания данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...