密码查询中的双重可选匹配无法按预期工作

  • 本文关键字:工作 查询 密码 neo4j cypher
  • 更新时间 :
  • 英文 :


我有一个相当复杂的密码查询,它是这样开始的。

OPTIONAL MATCH (oldP:Profile {id: 3.0, type: "person"})
DETACH DELEte oldP
CREATE (p:Profile)
SET p.id = 3.0
SET p.type = "person"

我想工作就像没有配置文件节点id:3.0和类型:人只是创建这个节点,但这个节点存在,我希望它被删除,然后再次创建。

然而,现在我想把这个查询改成这样:

OPTIONAL MATCH (:Profile {id: 3.0, type: "person"})-[:PROFILE_RELATED]->(toAttach)
OPTIONAL MATCH (oldP:Profile {id: 3.0, type: "person"})
DETACH DELEte oldP
CREATE (p:Profile)
SET p.id = 3.0
SET p.type = "person"

这我想工作完全像第一个,但在所有这些之前,我想找到所有节点与关系PROFILE_RELATED,我想把它们存储在toAttach和发送它们下查询使用with子句。

当我在没有节点的情况下运行此查询时,它可以正常工作。然而,当这个节点已经存在时,我得到"节点(344)已经存在,标签为Profile,属性为id= 3.0";我能做些什么

您可以这样做:

  1. 可选匹配该配置文件并查找关系
  2. 删除关系
  3. 如果不存在则创建
OPTIONAL MATCH (oldP:Profile {id: 3.0, type: "person"})-[r:PROFILE_RELATED]->(toAttach)
DELETE r
MERGE (:Profile {id: 3.0, type: "person"})