我有以下架构: (节点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行 ,但是当我检查数据库时,事实证明所有关系都已更新。
答案 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,你还面临任何问题吗?