我的数据库有Book的节点。
假设用户想要编辑他们读过的书籍,从而产生他们读过的所有书籍的新数组:
booksRead = ["Harry Potter", "Lord of the Rings"]
我如何:
如果Book in booksRead,则创建关系,删除尚未阅读的书籍的关系
所以让我们说用户放下他们以前读过的“饥饿游戏”。 “饥饿游戏”书将与用户分离,因为它不在新数组booksRead
中。
我知道如何处理第一部分,但需要帮助删除尚未阅读的图书的现有关系。
MATCH (user:User), (book:Book)
WHERE user.user_id = 1 AND book.title in ["Harry Potter", "Lord of the Rings"]
MERGE (user)-[r:READ]->(book)
RETURN book
附带问题:添加和删除1比1更好,而不是传入整个新数组来覆盖?我已经习惯了像MongoDB这样的NoSQL,只需更换整个数组......
答案 0 :(得分:2)
如果您希望阵列能够容纳所读书籍的完整集合,那么只需清除用户首先阅读的所有书籍,然后与阵列中的书籍形成所有新关系,或合并所有书籍首先从输入数组中删除任何不在数组中的数据。
以下是第二种方法的查询,该查询从原始查询继续。
MATCH (user:User), (book:Book)
WHERE user.user_id = 1 AND book.title in ["Harry Potter", "Lord of the Rings"]
MERGE (user)-[:READ]->(book)
WITH user, COLLECT(book) as booksRead
MATCH (user)-[r:READ]->(book:Book)
WHERE book NOT IN booksRead
DELETE r