如果在数组中,添加关系,否则删除关系

时间:2016-11-20 22:58:34

标签: neo4j

我的数据库有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,只需更换整个数组......

1 个答案:

答案 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