Cypher删除节点和所有相关节点,如果他们没有进一步的关系

时间:2016-04-25 14:41:06

标签: neo4j cypher

为了使我的数据库与孤立节点保持清洁,我想删除一个由给定属性值标识的节点 - 以及没有任何其他相关节点的每个相关节点

这可能吗?目前我正在这样做:

MATCH (poi:PointOfInterest)-[r]-(allRelatedNodes) 
WHERE poi.id="X007" 
DETACH DELETE poi, r, allRelatedNodes;

但是,删除所有相关节点,包括那些将被连接到其他节点的节点如果它们没有被删除。

有没有办法删除节点以及与其他节点没有关系的所有相关节点?

由作者编辑

明确的答案是正确的。我终于用

解决了我的问题
MATCH (poi:Node)-[r*0..1]-(allRelatedNodes) 
WHERE poi.name = "A"
AND size((allRelatedNodes)--()) < 2    
DETACH DELETE poi, allRelatedNodes;

1 个答案:

答案 0 :(得分:2)

如果您将int e[100], d[100]; CString Text; CString Line for(int i=0;i<100;i++){ Line.Format((LPCWSTR)L"%d \t%d\r\n", e, d); Text+=Line; } SetDlgItemText(IDC_Values, Text); 匹配设为可选,并确保allRelatedNodesallRelatedNodes只有一个关系,那么您应该只能删除附加到 X007 如果他们存在。另外,您不需要在删除声明中指定poi,因为r会处理此问题。

DETACH

使用Neo4j 3.0并从下图开始...

Starting Sample Graph

执行上述查询的近似传真(如下所列)......

MATCH (poi:PointOfInterest)
WHERE poi.id = "X0007"
WITH poi
OPTIONAL MATCH (poi)-[r]-(allRelatedNodes)
WHERE size((allRelatedNodes)--()) = 1    
DETACH DELETE poi, allRelatedNodes

我留下了这张图。

enter image description here

如果在一个查询中没有将其全部删除,您可以使用它,而且应该明确地处理它。

MATCH (poi:Node)-[r]-(allRelatedNodes) 
WHERE poi.name = "A"
AND size((allRelatedNodes)--()) = 1    
DETACH DELETE poi, allRelatedNodes