假设Neo4j中有3个子图,如果每个节点的属性值<= 1与子图中的所有节点匹配,则选择和删除全子图。但是,如果子图中至少有一个不匹配条件的,那么子图就不会被删除。
在这种情况下,左子图将被删除,而右子图和中间子图将保持不变。--即使它有一些值为1的节点,也不会删除正确的节点,因为也有值大于1的节点。
使用和值是节点属性。

如果有人能建议我可以使用密码查询,我将非常感激。请注意,查询将对整个图,即所有三个子图或更多,如果有更多。
发布于 2016-12-16 02:28:48
谢谢你的澄清,这是一个棘手的要求,而且我现在还不清楚什么是最好的方法,在大图中可以很好地扩展,因为大多数可能性似乎都是昂贵的全图操作。我们可能需要使用几个步骤来设置图形,以便以后更容易地查询。我也假设你的意思是“断续子图”,否则这个答案就行不通了。
一个开始可能是根据属性值将节点标记为:活着的或:死的。如果所有节点都具有相同的标签,如果该标签的value属性上有索引,则会有所帮助,因为我们的匹配操作可以利用索引,而不必进行全标签扫描和属性比较。
MATCH (a:MyNode)
WHERE a.value <= 1
SET a:Dead和单独
MATCH (a:MyNode)
WHERE a.value > 1
SET a:Alive然后,对要删除的节点标记的查询将是:
MATCH (a:Dead)
WHERE NOT (a)-[*]-(:Alive)
SET a:ToDelete如果您标记为delete的节点看起来都很好,那么您可以运行delete操作,必要时可以使用APOC过程中的apoc.periodic.commit()对操作进行批处理。
MATCH (a:ToDelete)
DETACH DELETE a如果对断开连接的子图的操作是常见的,我强烈建议使用一个特殊的节点连接到您创建的每个子图(例如,在子图开头的单个:集群节点),这样您就可以在:集群节点上开始这样的操作,这将极大地加快这类查询的速度,因为您的查询操作将在每个集群而不是每个:死节点上执行。
https://stackoverflow.com/questions/41174220
复制相似问题