Neo4J - CQL - Как точно соответствовать этому шаблону? - PullRequest
0 голосов
/ 21 декабря 2018

Я использую графическую базу данных Neo4J.

У меня есть две метки узла:

  • : Person (users)
  • : Event (события, созданные пользователями: с местом, startDate, гости, ...)

И 2 типа отношений:

  • : IS_INVITED_TO
  • : IS_INVITED_BY

Для простоты я упростил запрос до минимума.

Вот запрос:

MATCH (user:Person {guid: $userGuid})-[:IS_INVITED_TO]->(event:Event) 
WITH user, event 

MATCH (event)<-[:IS_INVITED_TO]-(user)-[:IS_INVITED_BY]->(invitor:Person) 
WITH user, event, collect(invitor) AS invitors 

RETURN {properties: properties(event), invite_by_nodes: invitors};

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

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

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

Я также пытался запустить loooooot вещей (3 дня потеряли ..):

  • UNWIND собирать (событие) AS событие (после первого MATCH & WITH): работатьс текущей итерацией события
  • Добавьте предложения WHERE, чтобы принудительно найти текущее событие
  • Я искал везде документацию Neo4J / stackoverflow

Помощь будет очень признательна!Большое спасибо: -)

1 Ответ

0 голосов
/ 21 декабря 2018

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

Ваша модель должна быть:

(:User)-[:HAS_INVITATION]->(i:Invitation)-[:FOR_EVENT]->(:Event),
(i:Invitation)-[:COMES_FROM]->(:User)

Таким образом, ваш запрос станет:

MATCH 
  (user:User {guid: $userGuid})[:HAS_INVITATION]->(i:Invitation),
  (i)-[:COMES_FROM]->(invitor:User),
  (i)-[:FOR_EVENT]->(e:Event)
RETURN e, invitor
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...