Neo4j如何从一组节点ID创建/删除关系

Neo4j如何从一组节点ID创建/删除关系,neo4j,cypher,Neo4j,Cypher,我有一个用户节点和中间节点节点。我希望能够提供一个兴趣数组来创建/删除/更改用户和兴趣之间的关系,我还希望在同一查询中更新用户节点上的一些属性 到目前为止,我要做的就是: MATCH (user:User {id: id}) OPTIONAL MATCH (user)-[oldRel:InterestedIn]->(:Interest) DETACH DELETE oldRel WITH user UNWIND {interestsIds} as id MATCH (interest:In

我有一个
用户
节点和
中间节点
节点。我希望能够提供一个兴趣数组来创建/删除/更改
用户
兴趣
之间的关系,我还希望在同一查询中更新用户节点上的一些属性

到目前为止,我要做的就是:

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
我认为这一个是有效的,虽然在某段时间内,
兴趣
被重复返回。。
同样,这个查询看起来有点过分了。你知道如何以更好的方式进行查询吗?

这似乎是正确的吗

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)

如何从该查询返回所有新兴趣?同样,当发送一个空的
{interestsIds}
时,似乎什么都没有发生,我得到的结果是空的。我只是做了一次编辑,以处理空的
{interestsIds}
案例。我不太清楚如何回报新的利益。你是指仅创建的兴趣点,还是指查询完成后附加到用户的所有兴趣点?我希望能够返回用户并收集他现在连接到的所有兴趣点..我刚才添加了一点,这应该会给你带来这些。它实际上并不比您的查询短,但它可能更直接一些