如何在neo4j 2.0中使用cypher删除具有NULL属性的节点或关系

9
我创建了一些节点和它们之间的关系。但在此过程中出现了问题。我想删除所有带有“SGS”的节点,除了ID为2的节点。
以下是我运行用于创建节点和关系的脚本:
(如果可能,请还建议如何编辑此脚本)
我尝试了DELETE(以及match,where,IS NULL等),并尝试了一些不同的试错方法,但无法达到相同的效果。请帮忙。

嗨,由于这是我在SE上的第一个问题,可能会有点混乱。我请求您这一次容忍我。 - ShreyansS
关于您的查询,第15行有一个'<br>'。 - Michael Johansen
3个回答

8

看起来你的所有节点都有名称,除了你想要删除的那个节点。所以你可以尝试:

match n
WHERE NOT (HAS (n.name)) //find all nodes with no name property
with n
match n-[r]-() //find all nodes connected to that node
delete r,n //delete its relations and then the node itself

(注意未测试)

看起来在你的创建语句中,你使用了(rkn)而不是(rk),也可能使用了(answ)代替其他内容。因此,(rkn)-[:READ] ->(bk1)只会创建一个表示rkn和OneNight@CallCenter的READ关系没有属性的节点。您只需要验证并修正这些错误。

例如,所有关系都引用名为(rkn)的节点,因此我将create语句中的rk节点重命名为rkn。还请确保每个节点在关系中都有与create语句匹配的节点。

注意: HAS在Cypher中已不再支持,请改用EXISTS!


谢谢Luanne,它起作用了。我只是3天前开始使用这项技术,所以不知道“WITH/HAS”等内容。是否可以回答如何编辑相同的内容(我在创建时犯了什么错误)? - ShreyansS
我早就尝试过(因为我知道使用UNIQUE)但是仍然出现同样的错误:“CREATE UNIQUE不支持此模式”。 - ShreyansS
关于 PatternException 的问题与删除节点的问题不同,因此您应该单独提问。如果您这样做,有人可能会回答 CREATE UNIQUE 要求模式的某个部分已经绑定-首先匹配一些内容,然后从那个内容创建唯一的关系和节点,即 MATCH (a {name:"A"}) CREATE UNIQUE a-[:R]->(b {name:"B"})。 如果您想要唯一的单个节点,请使用 MERGE - jjaderberg

4

这个对我起作用了

match (n) WHERE NOT (EXISTS (n.name)) DETACH DELETE n

0

以上所有内容目前在Cypher中都无法工作。

尝试以下Cypher查询。这是有效的:

//查找所有没有名称属性的节点。

MATCH (n) WHERE NOT ((n.name)IS NOT NULL)

//分离所有关系并删除找到的节点,即空节点。

DETACH DELETE n


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接