2016-03-09 129 views
1

我有一個User節點和Intersets節點。我希望能夠給出一組興趣來創建/刪除/更改UserInterests之間的關係我也希望在同一查詢中更新用戶節點上的一些屬性。Neo4j如何從一組節點創建/刪除關係ids

到目前爲止,這是我所家政做:

MATCH (user:User {id: id}) 
OPTIONAL MATCH (user)-[oldRel:InterestedIn]->(:Interest) 
DETACH DELETE oldRel 
WITH user 
UNWIND {interestsIds} as id 
MATCH (interest:Interest {id: id}) 
MERGE (user)-[rel: InterestedIn]->(interest) 
SET user.name = {user}.name, ..(more sets) 
RETURN user, collect(interest) as interests 

我覺得這一個是工作壽一些時間看起來像interests返回複製.. 除了這個查詢看起來有點的矯枉過正。任何想法如何以更好的方式做這個查詢?

回答

2

這似乎是正確的嗎?

MATCH (user:User {id: id}) 
OPTIONAL MATCH (interest:Interest) 
WHERE interest.id IN {interestsIds} 
MERGE (user)-[:InterestedIn]->(interest) 

WITH DISTINCT user 
MATCH (user)-[rel:InterestedIn]->(interest:Interest) 
WHERE NOT(interest.id IN {interestsIds}) 
DELETE rel 

WITH DISTINCT user 
MATCH (user)-[:InterestedIn]->(interest:Interest) 
RETURN user, collect(interest) 
+0

如何從該查詢返回所有新興趣? – tubu13

+0

另外,當發送一個空的'{interestsIds}'似乎沒有發生,我得到空的結果 – tubu13

+0

我只是做了一個編輯,照顧空的'{interestsIds}'的情況。我不太清楚如何回報新的興趣。你的意思只是那些被創建的,或者你的意思是在查詢完成之後附加到用戶的所有興趣? –

相關問題