Условия: Эмильneo4j: как построить правильный запрос?
Пользователь знает, Дэн и Питер.
Emil добавляет 1 звезду видео «о кошках»
Dan добавляет 5 звезд к видео «крутому фильму» и 3 звезды на видео «о кошках»
Петр добавляет 1 звезду к видео "крутой фильм" и 3 звезды на видео "смешное видео"
Проблема:
Эмиль должен знать все V идеологов, которых он знакомил, и других пользователей, которые его сняли. Но он не интересовался видео, с которым он уже снялся. Кроме того, ему нужно получить видео, отсортированное по общей оценке.
В нашем случае выход должен быть:
1) "крутой фильм", 6 звезд, снимались Дэн и Питер
2) "забавное видео", 3 звезды, избранные Петром
Вопрос: как может выглядеть запрос? Спасибо.
Запрос для заполнения базы данных:
CREATE
(emil:User { name: "Emil" }),
(dan:User { name: "Dan" }),
(peter:User { name: "Peter" }),
(emil)-[:KNOWS]->(dan),
(emil)-[:KNOWS]->(peter),
(cool:Video { title: "cool film" }),
(funny:Video { title: "funny video" }),
(cats:Video { title: "about cats" }),
(emil)-[:RATE { score: 1 }]->(cats),
(dan)-[:RATE { score: 5 }]->(cool),
(dan)-[:RATE { score: 3 }]->(cats),
(peter)-[:RATE { score: 1 }]->(cool),
(peter)-[:RATE { score: 3 }]->(funny)
Вы еще не пытались выполнить запрос? Иногда это помогает попробовать и посмотреть, как далеко вы сможете добраться. – InverseFalcon
Мой самый длинный пробег - ** MATCH (источник: Пользователь) - [: KNOWS] -> (пользователи) - [r: RATE] -> (видео), где source.name = 'Emil' и NOT (source) - [: RATE] -> (видео) возвращает videos.title, sum (r.score) в качестве порядка оценки по счету desc **. Выглядит почти близко, но не знаю, как агрегировать информацию пользователя в запрос :) –