2016-11-20 88 views
0

我的数据库有Book节点。如果在数组中,添加关系,否则删除关系

比方说,用户希望编辑他们已经看过的书,造成的所有书籍的新阵中,他们已经阅读:

booksRead = ["Harry Potter", "Lord of the Rings"] 

如何:

创建如果图书在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,而不是传入整个新阵列覆盖更好吗?我习惯于像MongoDB这样的NoSQL,它可以轻松替换整个阵列...

回答

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 
+0

第一次看到WITH和COLLECT。我需要学习更多的语法! – kayla