Получить пост подписчиков вместе с собственными постами в neo4j - PullRequest
0 голосов
/ 20 ноября 2018

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

MATCH (me:User {UserId: '39434e4d-d501-4fba-8aae-16cf652deb3e'})-[:FOLLOWSS|CREATED]->(f:User)-(p:Posts) RETURN p LIMIT 25 

, указанный выше запрос возвращает сообщение моих подписчиков, но я не могу получить свое собственное сообщение.Может кто-нибудь сказать мне, что мне не хватает, чтобы получить мои собственные сообщения вместе с постом моих подписчиков

MATCH (me:User {UserId: '39434e4d-d501-4fba-8aae-16cf652deb3e'})-[:FOLLOWSS]->(f:User)-[fc:CREATED|LIKED]-(p:Posts)<-[:CREATED]-(n) RETURN p LIMIT 25

Я пробовал запрос выше, но он не возвращает никаких записей.

Любая помощь будетвысоко ценится.

Спасибо.

Ответы [ 3 ]

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

Самый простой способ сделать это - с помощью необязательного отношения переменной длины, которого можно достичь, используя нижнюю границу 0:

MATCH (me:User {UserId: '39434e4d-d501-4fba-8aae-16cf652deb3e'})-[:FOLLOWSS*0..1]->(f:User)-[:CREATED]-(p:Posts) 
RETURN p LIMIT 25 

Ключ [:FOLLOWSS*0..1] является ключом, поскольку это означает, чточто он будет включать шаблоны, имеющие отношение: FOLLOWSS к другому: узлу пользователя, а также шаблоны, в которых не прослеживаются никакие отношения (это означает, что ваш пользователь me является тем же узлом, что и узел f: пользователь).

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

Основываясь на ответе @ InverseFalcon , вот запрос, который возвращает данные во встроенных коллекциях:

MATCH (n:User {name:"ikwattro"})<-[:FOLLOWS*0..1]-(x)-[:CREATED]->(p:Post)
RETURN n, 
[x IN collect(p) WHERE (n)-[:CREATED]->(x) | x.title] AS userPosts, 
[x IN collect(p) WHERE NOT (n)-[:CREATED]->(x) | x.title] AS followersPosts


╒═══════════════════╤═══════════╤═════════════════════════╕
│"n"                │"userPosts"│"followersPosts"         │
╞═══════════════════╪═══════════╪═════════════════════════╡
│{"name":"ikwattro"}│["Post1"]  │["Post4","Post3","Post2"]│
└───────────────────┴───────────┴─────────────────────────┘
0 голосов
/ 20 ноября 2018
MATCH (me:User {UserId: '39434e4d-d501-4fba-8aae-16cf652deb3e'})-[:FOLLOWSS]->(f:User)-[fc:CREATED]-(p:Posts)<-[:CREATED]-(n) RETURN p LIMIT 25

возвращает каждое сообщение, созданное вами И кем-то еще.Вам нужно разделить переменные, которые являются разными элементами

MATCH (mine:Posts)<-[:CREATED]-(me:User {UserId: '39434e4d-d501-4fba-8aae-16cf652deb3e'})-[:FOLLOWSS]->(f:User)-[fc:CREATED]-(p:Posts) RETURN mine, p LIMIT 25

Но это возвращает информацию по-разному избыточно (каждый ваш пост против каждого их поста), поэтому я бы рекомендовал сжать ее с помощью COLLECT следующим образом.

MATCH (mine:Posts)<-[:CREATED]-(me:User {UserId: '39434e4d-d501-4fba-8aae-16cf652deb3e'})-[:FOLLOWSS]->(f:User)-[fc:CREATED]-(p:Posts)
WITH mine, p LIMIT 25
WITH COLLECT(mine)+COLLECT(p) as posts
UNWIND posts as p
RETURN p LIMIT 25
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...