2016-11-10 7 views
1

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

  1. узлы пользователя
  2. почтовые узлы. Почтовый узел подключается к пользовательскому узлу по отношениям POSTED_BY, и узел Post может быть связан с другим узлом Post посредством отношения SHARING в случае, если сообщение передает другое сообщение.

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

мне удалось получить необходимую информацию с помощью дополнительного матча, но я новичок в Neo4j и не уверен, что это правильный путь:

match (p:Post)-[r: POSTED_BY]-(publisher:User) 
where publisher.userId = {userId} 
optional match (p:Post)-[r2: SHARED_POST]-(sharedPost:Post)-[r3: POSTED_BY]-(sharedPostPublisher: User) 
return p as post,publisher, sharedPost, sharedPostPublisher 

Является ли это правильный путь, чтобы получить эту информацию или должны Я использую другие методы?

ответ

1

Помимо отсутствия направления на отношения, это выглядит хорошо.

Отсутствие направления, конечно, немного меньше за себя (даже если есть неявное направление, как User не POSTED_BYPost), но он также изменяет семантику запроса: поскольку SHARED_POST отношений может пройденный в любом направлении, конечно, вы получите исходный пост в случае акции, но вы также получите все акции в случае, если он - оригинальное сообщение. Это не то, что ты сказал, что хочешь.

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