2013-07-23 2 views
0

У меня есть график, который выглядит как этотNeo4j Cypher получить все узлы в кольцевом связанном списке

(user)->[:Comments]->(comment)->[:Comments]->(comment)->[:Comments]->(comment)->(user) 

В основном это круговой связанный список комментариев о том, что пользователь сделал. Список крутится вокруг и возвращается к пользователю. Как использовать cypher для извлечения всех комментариев?

ответ

2

Нанесенный удар, и это выглядит немного запутанным для меня, но здесь все равно.

Предполагаемые отношение от последнего комментария к пользователю является: Комментарии

т.е. вместо ..->(comment)->(user)

Я предположил ..->(comment)-[:Comments]->(user)

START n=node(1) 
MATCH n-[:Comments*0..]->(c) 
WHERE c<>n 
WITH collect(c) AS allComments,n 
WITH last(allComments) AS lastcomment,n,allComments 
WHERE lastcomment-[:Comments]->n 
RETURN allComments 

я должен был поставить в WHERE с <> п так последний комментарий -> отношение пользователя - Комментарии. Если это что-то еще, тем лучше, не нужно это (это просто, чтобы просто выбрать последний комментарий в цепочке). Также он возвращает коллекцию.

http://console.neo4j.org/r/17d1fy

Bet @Wes Freeman имеет niftier решение

+0

Ницца, как же результаты в консоли возвращает пользователю? –

+0

Я взял то, что у вас было, и отредактировал его так: http://console.neo4j.org/?id=cx1gh9, у которого есть ваше сердце, но не возвращает пользователя. –

+0

Хороший вопрос, позвольте мне вернуться к моему и проверить, почему пользователь возвращается, не заметил. Пример консоли, который вы опубликовали, был моей первой попыткой, но проблема заключается в том, что вы также получите цепочки, у которых нет последнего комментария, связанного с исходным пользователем. Если это нормально, вам не нужны все лишние вещи в моей (что в основном, чтобы установить окончательную ссылку назад) – Luanne

Смежные вопросы