Запрос Neo4j Cypher ВОЗВРАЩАЕТ отдельный набор узлов

У меня есть простая модель базы данных графа социальной сети. Пользователи могут подписываться на других пользователей и публиковать сообщения. Я пытаюсь получить список всех сообщений, опубликованных пользователем, а также всех сообщений, опубликованных кем-либо, на кого подписан пользователь.

START a=node:node_auto_index(UserIdentifier = "USER0") 
MATCH (a)-[:POSTED]->(b), (a)-[:FOLLOWS]->(c)-[:POSTED]->(d) 
RETURN b, d;

Он возвращает перекрестное произведение двух, кортеж всех значений в b, соединенный со всеми значениями в d. (б х г) Хотелось бы просто прямой список постов. Как мне это сделать? Нужно ли делать два отдельных запроса?


person Aran Mulholland    schedule 30.10.2012    source источник


Ответы (2)


Ответ получен на https://groups.google.com/forum/?fromgroups=#!topic/neo4j/SdM7bKNRDEA :

START a=node:node_auto_index(UserIdentifier = "USER0") 
MATCH (a)-[:POSTED]->(b)
WITH a, collect(b) as posts
MATCH (a)-[:FOLLOWS]->(c)-[:POSTED]->(d) 
RETURN posts, collect(d) as followersPosts;
person Peter Neubauer    schedule 01.11.2012

Другой способ сделать это сейчас (и ИМХО более чистый способ) - воспользоваться отношениями переменной длины.

START user=node...
MATCH (user) -[:FOLLOWS*0..1]-> (following) -[:POSTED]-> (post)
RETURN post

Преимущество этого способа в том, что он позволяет вам единообразно объединять как ваши собственные запросы, так и запросы ваших друзей/фолловеров. Например. сортировка, ограничение, разбиение на страницы и т. д.

person Aseem Kishore    schedule 17.06.2014