Возврат только определенных отношений (из множества одного типа) между двумя узлами - PullRequest
0 голосов
/ 20 декабря 2018

Допустим, у меня есть: два типа узлов: Пользователь , Место и соотношение между этими двумя: Тарифы (Пользователь ЦЕНЫ Место, можно оценивать то же местонесколько раз)

Я хочу получить список самых последних оценок (для пользователя) для определенного места (предоставив placeId ) для всех пользователей

Итак, из следующей ситуации:

USER_1 RATES (createdAt: yesterday) PLACE_1
USER_1 RATES (createdAt: today) PLACE_1
USER_2 RATES (createdAt: yesterday) PLACE_1
USER_2 RATES (createdAt: today) PLACE_1

Я хочу получить:

USER_1 RATES (createdAt: today) PLACE_1
USER_2 RATES (createdAt: today) PLACE_1

Это возможно с помощью шифрового запроса или мне лучше изменить логику и пометить определенные отношения RATES как самые последние?

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018
MATCH (u)-[r:RATE]->(p)
With u, r, p
order by r.createdAt desc
with u, collect(r) AS rates, p 
return u, head(rates), p

Сначала получите все отношения и упорядочите их по createdAt от самых последних до менее недавних (DESC)

Затем создайте список тарифов, заданных пользователем для места с collect

Наконец, верните первый элемент каждого списка с head, чтобы получить самый последний показатель

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

Создать пример базы данных

CREATE
(a:USER { id:1 } ),
(b:USER { id:2 } ),
(c:PLACE { id:1 } ),
(a)-[:RATE {createdAt: localdatetime("2018-12-20T12:34:00"), rating:5 }]->(c),
(a)-[:RATE {createdAt: localdatetime("2018-12-21T12:34:00"), rating:9 }]->(c),
(b)-[:RATE {createdAt: localdatetime("2018-12-20T12:34:00"), rating:8 }]->(c),
(b)-[:RATE {createdAt: localdatetime("2018-12-21T12:34:00"), rating:7 }]->(c);

Запрос (Этот запрос основан на этом ответе)

MATCH (a:USER)-[r:RATE]->(:PLACE)
WITH a, r
ORDER BY a.id DESC 
WITH a, collect(r) AS ratings
WITH a, last(ratings) AS rating
RETURN a.id AS user, endNode(rating).id as place, rating.createdAt AS time;

Результат

user   place   time
1      1       2018-12-21T12:34:00
2      1       2018-12-21T12:34:00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...