为了使我的数据库与孤立节点保持清洁,我想删除一个由给定属性值标识的节点 - 以及没有任何其他相关节点的每个相关节点。
这可能吗?目前我正在这样做:
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;
答案 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);
匹配设为可选,并确保allRelatedNodes
与allRelatedNodes
只有一个关系,那么您应该只能删除附加到 X007 0}的关系强>如果他们存在。另外,您不需要在删除声明中指定poi
,因为r
会处理此问题。
DETACH
使用Neo4j 3.0并从下图开始...
执行上述查询的近似传真(如下所列)......
MATCH (poi:PointOfInterest)
WHERE poi.id = "X0007"
WITH poi
OPTIONAL MATCH (poi)-[r]-(allRelatedNodes)
WHERE size((allRelatedNodes)--()) = 1
DETACH DELETE poi, allRelatedNodes
我留下了这张图。
如果在一个查询中没有将其全部删除,您可以使用它,而且应该明确地处理它。
MATCH (poi:Node)-[r]-(allRelatedNodes)
WHERE poi.name = "A"
AND size((allRelatedNodes)--()) = 1
DETACH DELETE poi, allRelatedNodes