从Neo4j DB中删除一行

时间:2014-04-10 15:34:34

标签: neo4j

我有这个小图:

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行没有这种损失?

此时我可以轻松删除所有节点并从我的数据库中删除 - 完全清除它,并从头开始重建所有内容。但是后来,当我有数以千计的条目时,这种纠正错误的方式太费时间了......

2 个答案:

答案 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