Neo4j ';向上插入';关系

Neo4j ';向上插入';关系,neo4j,cypher,Neo4j,Cypher,使用cypher,我想在两个节点(nodeA和nodeC)之间创建一个关系 首先,我必须检查关系(nodeA:OWNS nodeC)是否存在。如果没有要删除的关系:OWNS关系节点A可能与其他节点有关系 (例如,nodeA:OWNS nodeB)和create:OWNS nodeA和nodeC之间 有没有一个有效的方法让我用Cypher来做这个 多谢各位 编辑:我接受了一个答案,但是很快。。如果nodeA有多个[:OWNS]关系,通过为nodeB提供特定id,它只会从nodeB中删除[:OWNS

使用cypher,我想在两个节点(nodeA和nodeC)之间创建一个关系

首先,我必须检查关系(nodeA:OWNS nodeC)是否存在。如果没有要删除的关系:OWNS关系节点A可能与其他节点有关系 (例如,nodeA:OWNS nodeB)和create:OWNS nodeA和nodeC之间

有没有一个有效的方法让我用Cypher来做这个

多谢各位


编辑:我接受了一个答案,但是很快。。如果nodeA有多个[:OWNS]关系,通过为nodeB提供特定id,它只会从nodeB中删除[:OWNS]并与nodeC交换,对吗

除了为MERGE的“ON CREATE”和“ON MATCH”设置外,我认为Cypher不允许你做任何花哨的事情

一种方法可能是在单独的密码查询中执行此操作

但是,这也可能会起到作用:

MATCH (nodeA {id: <nodeA_id>})-[r:OWNS]->(nodeB), (nodeC {id: <nodeC_id>})
WHERE (nodeB) <> (nodeC)
MERGE (nodeA)-[:OWNS]->(nodeC)
DELETE r
MATCH(nodeA{id:})-[r:OWNS]>(nodeB),(nodeC{id:})
其中(nodeB)(nodeC)
合并(nodeA)-[:拥有]->(nodeC)
删除r
如果可能的话,一定要尝试使用标签来标识节点,例如NodeA:User。这将大大加快速度

让我们知道这是否对您有效


HTH

我认为除了为MERGE的“创建”和“匹配”设置外,Cypher不允许你做任何花哨的事情

一种方法可能是在单独的密码查询中执行此操作

但是,这也可能会起到作用:

MATCH (nodeA {id: <nodeA_id>})-[r:OWNS]->(nodeB), (nodeC {id: <nodeC_id>})
WHERE (nodeB) <> (nodeC)
MERGE (nodeA)-[:OWNS]->(nodeC)
DELETE r
MATCH(nodeA{id:})-[r:OWNS]>(nodeB),(nodeC{id:})
其中(nodeB)(nodeC)
合并(nodeA)-[:拥有]->(nodeC)
删除r
如果可能的话,一定要尝试使用标签来标识节点,例如NodeA:User。这将大大加快速度

让我们知道这是否对您有效


HTH

成功了,非常感谢!如果nodeA有多个[:OWNS]关系,通过为nodeB提供特定id,它只会从nodeB中删除[:OWNS]并与nodeC交换,对吗?你的第一个问题是:是的。此外,表示“不等于”。我很高兴我的回答有帮助。请接受它作为这个问题的答案。谢谢,就这样,非常感谢!如果nodeA有多个[:OWNS]关系,通过为nodeB提供特定id,它只会从nodeB中删除[:OWNS]并与nodeC交换,对吗?你的第一个问题是:是的。此外,表示“不等于”。我很高兴我的回答有帮助。请接受它作为这个问题的答案。谢谢