【问题标题】:Neo4j: How do I delete a specific relationship with cypher?Neo4j:如何删除与 cypher 的特定关系?
【发布时间】:2013-10-01 18:07:18
【问题描述】:

假设我有一个用户:

CREATE (n { name: 'Tamil' })

和 2 个角色:

CREATE (n { name: 'developer' } ) 
CREATE (n { name: 'tester' } )

然后,我在用户和两个角色之间建立关系。

CYPHER 1.9  START a = node(*), b = node(*) 
WHERE a.name = 'Tamil' AND b.name = 'developer' 
CREATE (a)-[r:HAS_ROLE]->(b) 
RETURN r

CYPHER 1.9  START a = node(*), b = node(*) 
WHERE a.name = 'Tamil' AND b.name = 'tester' 
CREATE (a)-[r:HAS_ROLE]->(b) 
RETURN r

现在,我想从用户中删除测试员角色关系。 我试过了:

CYPHER 1.9  START a = node:node_auto_index('name:Tamil') 
MATCH a-[r:HAS_ROLE]-() 
RETURN r

但是,它返回两种关系。 我知道我可以将财产与关系联系起来。但是,同样,我不知道密码语法。

我是 Neo4j 的新手。任何建议都会非常棒!

谢谢!

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    我使用此查询删除了您原始图表上的关系:

    START n=node(*) 
    MATCH (n)-[rel:HAS_ROLE]->(r) 
    WHERE n.name='Tamil' AND r.name='tester' 
    DELETE rel
    

    【讨论】:

    • 对于 3.0.3 版本,您必须将 MATCH 子句更改为 MATCH (n)-[rel:HAS_ROLE]->(r ) 否则会出现错误(注意 'n 周围的括号' 和 'r')
    • 语法和2019一样吗?
    【解决方案2】:

    我找到了。我改变了关系以拥有财产。像这样:

    CYPHER 1.9  START a = node(*), b = node(*) 
    WHERE a.name = 'Tamil' AND b.name = 'developer' 
    CREATE (a)-[r:HAS_ROLE {id: xyz}]->(b) 
    RETURN r
    
    CYPHER 1.9  START a = node(*), b = node(*) 
    WHERE a.name = 'Tamil' AND b.name = 'tester' 
    CREATE (a)-[r:HAS_ROLE {id: abc}]->(b) 
    RETURN r
    

    那么下面这段代码删除了指定的关系。

    CYPHER 1.9  START a = node:node_auto_index('name:Tamil') 
    MATCH a-[r:HAS_ROLE]-() 
    WHERE r.id = abc
    DELETE r;
    

    我不确定这是否是正确的做法。但是,它有效。

    【讨论】:

    • 这似乎很违反直觉 - 你怎么知道关系的 ID 是什么?看看 Werner 的答案,它应该对你有用。
    猜你喜欢
    • 2022-11-21
    • 1970-01-01
    • 2022-10-19
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多