Neo4J Получить только первые отношения на узел - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть этот график, где узлы являются исследователями, и они связаны отношением с именем R1, отношение имеет свойство «значение».Как я могу получить имя исследователей, которые находятся в отношениях с наибольшей ценностью?Это все равно что упорядочить все отношения по r.value DESC, но получить только первые отношения для каждого исследователя, потому что я не хочу видеть на столе дублированные имена исследователей.Кстати, есть ли способ получить название порядка исследователей с помощью их отношения «ценности»?Извините за запутанную тему, я не очень хорошо говорю по-английски, большое спасибо.

Я пробовал что-то вроде запроса Cypher ниже:

MATCH p=(n)-[r:R1]->(c) 
WHERE id(n) < id(c) and r.coauthors = false 
return DISTINCT n.name order by n.campus, r.value DESC

1 Ответ

0 голосов
/ 13 ноября 2018

Поправьте меня, если я ошибаюсь, но вы хотите один результат на "n" с наибольшим значением из "r"?

MATCH (n)-[r:R1]->(c) 
WHERE r.coauthors = false
WITH n, r ORDER BY r.value DESC
WITH n, head(collect(r)) AS highR
RETURN n.name, highR.value ORDER BY n.campus, highR.value DESC

Это приведет вас в порядок и выберет первое head(collect(r)) после первого выполнения ORDER BY. Тогда вам просто нужно вернуть значения, которые вы хотите. Проверьте Функции агрегации Neo4j для некоторой документации о том, как работают функции агрегирования. Удачи!

Кроме того, если есть метка, которая есть у всех "n", вы должны добавить ее в свой MATCH: MATCH (n:Person) .... это поможет ускорить ваш запрос!

...