我有这个小图:
CREATE (Thing:Class {title:'Thing'})
CREATE (Places:Class{title:'Places'})
CREATE (Lemma:Class {title:'Lemma'})
CREATE (Country:Class {title:'Country'})
CREATE (Region:Class {title:'Region'})
CREATE (loc1:Index {title:'loc00001'})
CREATE (loc1_1:Index {title:'loc00001.01'})
CREATE (Abc:Placename {title:'Abc', gender:'n'})
CREATE
(Thing)-[:HAS_SUBCLASS]->(Places),
(Thing)-[:HAS_SUBCLASS]->(Lemma),
(Places)-[:HAS_SUBCLASS]->(Country),
(Country)-[:HAS_SUBCLASS]->(Region),
(Country)-[:HAS_SUBCLASS]->(Region),
(Places)-[:HAS_INDIVID]->(loc1),
(loc1)-[:HAS_LA_VAR]->(loc1_1),
(loc1_1) -[:HAS_VAR_NAME]->(Abc)
我犯了一个错误,定义了(国家) - [:HAS_SUBCLASS] - >(地区)关系2次。 如果我运行此查询:
MATCH (n { title: 'Country'})-[r]-() DELETE n,r
它将删除所有与Country相关的节点和所有HAS_SUBCLASS关系,这有点像我的小DB的一半。
有没有办法只删除数据库中的1行没有这种损失?
此时我可以轻松删除所有节点并从我的数据库中删除 - 完全清除它,并从头开始重建所有内容。但是后来,当我有数以千计的条目时,这种纠正错误的方式太费时间了......
答案 0 :(得分:2)
您需要添加标签以将其缩小到标题为“国家/地区”的类。这里:
在我的neo4j-shell中,它与你的测试数据一样:
$ MATCH (n:Class { title: 'Country'})-[r]-() DELETE n,r;
+-------------------+
| No data returned. |
+-------------------+
Nodes deleted: 1
Relationships deleted: 3
请注意,删除节点时,必须执行所有事件关系。
根据您提供的数据样本,这是有效的。
现在另外一件事 - 你没有在这些节点上创建许多差异化属性。如果您有一个数据集,此查询与多个节点匹配:
MATCH (n:Class { title: "Country" }) return n;
那么你的节点可能只是定义得过于宽泛。如果您只想删除一个这样的节点,则需要节点的ID或其他一些使其与其他节点不同的属性。
答案 1 :(得分:2)
见下文。请记住,关系ID对您来说会有所不同,但这只是为了说明。
好的,首先让我们弄清楚哪个关系是重复的(见其他答案的评论)
neo4j-sh (?)$ match (n:Class {title:"Country"})-[r:HAS_SUBCLASS]->(Region:Class {title:"Region"}) return r;
+-----------------------+
| r |
+-----------------------+
| :HAS_SUBCLASS[9170]{} |
| :HAS_SUBCLASS[9171]{} |
+-----------------------+
2 rows
7 ms
现在只查询其中一个关系来演示......
neo4j-sh (?)$ start r=relationship(9170) return r;
+-----------------------+
| r |
+-----------------------+
| :HAS_SUBCLASS[9170]{} |
+-----------------------+
1 row
204 ms
现在只删除第一个。
neo4j-sh (?)$ start r=relationship(9170) delete r;
+-------------------+
| No data returned. |
+-------------------+
Relationships deleted: 1
16 ms
现在证明原始查询现在只返回1个关系。
neo4j-sh (?)$ match (n:Class {title: "Country"})->[r:HAS_SUBCLASS) Region:Class match (n:Class {title:"Country"})-[r:HAS_SUBCLASS]->(Region:Class {title:"Region"}) return r;
+-----------------------+
| r |
+-----------------------+
| :HAS_SUBCLASS[9171]{} |
+-----------------------+
1 row
11 ms