Cypher - 具有相同标签的多个关系,我想只删除一个

时间:2014-01-17 16:22:34

标签: neo4j cypher

我有以下架构: (节点a和b由id标识,并且在两个关系中都相同)

(a)-[r:RelType {comment:'a comment'} ]-(b)
(a)-[r:RelType {comment:'another comment'} ]-(b)

所以我有2个节点,它们之间有任意数量的关系。我想删除其中一个关系,我不关心哪一个。我怎么能这样做?

我试过这个,但它不起作用:

match (a {id:'aaa'})-[r:RelType]-(b {id:'bbb'}) where count(r)=1 delete r;

有什么想法吗?

以下是真实世界的查询:

match (order:Order {id:'order1'}),(produs:Product {id:'supa'}),
(order)-[r:ordprod {status:'altered'}]->(produs) with r limit 1 set r.status='alteredAgain'
return (r);

问题是Chypher说     设置1属性,在219毫秒内返回1行 ,但是当我检查数据库时,事实证明所有关系都已更新。

3 个答案:

答案 0 :(得分:3)

使用以下内容:

match (a {id:'aaa'})-[r:RelType]-(b {id:'bbb'}) 
with r
limit 1
delete r

答案 1 :(得分:0)

希望这有帮助(根据我的理解,你试图修改两个给定节点之间的关系)

MATCH (order:Order {id:'order1'})-[r:ordprod {status:'altered'}]->(produs:Product {id:'supa'})
WITH order,r,produs 
LIMIT 1 
DELETE r
WITH order,produs
CREATE (order:Order {id:'order1'})-[r:ordprod {status:'alteredAgain'}]->(produs:Product {id:'supa'})
return (r);

所有关系得到更新的原因是,在您的WITH子句之后,您只传递了标签Order和{{1}的所有此类节点之间可能相同的关系}。因此,当您执行Product时,它会更改所有关系,而不是在您在密码查询开头匹配的两个特定节点之间进行更改。也可以在r.status = 'alteredagain'中传递它们,它会正常工作!

答案 2 :(得分:0)

我试图像你的(Mihai's)那样实现数据结构。两种解决方案都没有;即Stefan和Sumit。 Stefan的解决方案正在我身边。 Mihai,你还面临任何问题吗?