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

(liker:User)-[:LIKED]->(target:User)

Но я не хочу хранить все как с начала времени. Я хочу только 200 последних пользователей, которые понравились пользователю. Поэтому перед добавлением новой связи я должен удалить 201-ую связь, но я не знаю, как ее удалить.

Как я могу это сделать ?

0
soling 19 Авг 2019 в 16:40

2 ответа

Лучший ответ

Вам нужно немного больше информации в вашей схеме, так как вам нужно знать порядок, в котором «лайкеры» привязаны к «цели», чтобы удалить 201-ую. Примечание: Вы не можете полагаться на порядок сортировки id(rel) в том порядке, в котором цели понравились, поскольку идентификаторы используются повторно.

Предположим, что вы добавляете свойство dateTime, likedOn к :LIKED отношению, вы можете выполнить что-то вроде этого:

MATCH (liker:User)-[rel:LIKED]-(target:User) 
WITH rel 
ORDER BY rel.likeOn DESC 
SKIP 200 
DELETE rel

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

1
Marj 19 Авг 2019 в 16:12
MATCH (:User {username: "Bobby"})-[r:LIKED]->(:User)
WITH r ORDER BY r.date DESC SKIP 200
DELETE r
0
soling 19 Авг 2019 в 15:44