У меня есть график, который содержит отношения между пользователями, показывая, какой пользователь понравился чужому профилю, и когда:
(liker:User)-[:LIKED]->(target:User)
Но я не хочу хранить все как с начала времени. Я хочу только 200 последних пользователей, которые понравились пользователю. Поэтому перед добавлением новой связи я должен удалить 201-ую связь, но я не знаю, как ее удалить.
Как я могу это сделать ?
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
Вам необходимо отсортировать отношения в порядке убывания, чтобы последние цели оставались в верхней части промежуточного набора результатов, чтобы пропустить их и удалить те цели, которые понравились больше всего.
MATCH (:User {username: "Bobby"})-[r:LIKED]->(:User)
WITH r ORDER BY r.date DESC SKIP 200
DELETE r
Похожие вопросы
Новые вопросы
neo4j
Neo4j - это графическая база данных с открытым исходным кодом (GDB), хорошо подходящая для связанных данных. Пожалуйста, указывайте свою точную версию Neo4j, задавая вопросы. Вы можете использовать его для механизмов рекомендаций, обнаружения мошенничества, поиска на основе графиков, сетевых операций / безопасности и многих других пользовательских случаев. Доступ к базе данных осуществляется через официальные драйверы в Java, JavaScript, Python и .NET или через драйверы сообщества в PHP, Ruby, R, Golang, Elixir, Swift и других.