删除Neo4j中用户的所有关系和连接节点

4
我们已经选择neo4j作为我们的Web应用程序的数据库。用户有大量的关系和连接节点。目前一个用户有大约20个关系。其中一个功能是新闻订阅功能。如果我想彻底删除一个用户,Cypher查询是最好的方法还是还有其他替代方法?
由于我们仍在计划添加新功能,与用户相关的关系和节点也会增加。因此,如果我们使用Cypher查询,则必须针对每个新添加的关系修改查询。请给予建议。
谢谢, Pavan
3个回答

7

是的,您可以使用Cypher来删除用户。当然,根据您在Web应用程序中使用的语言或框架,还有其他方法可供选择。如果您想获得这方面的建议,请详细说明您如何使用Neo4j。

请注意,在删除节点之前,您必须首先删除所有关系(出站和入站)。

示例:

START n = node(3)
MATCH n-[r]-()
DELETE n, r

以下示例摘自官方手册:http://docs.neo4j.org/chunked/milestone/query-delete.html


谢谢Amorgner。是的,我在文档中看到了这个。这是与节点直接相关的。在我的情况下,关系很复杂,还有新闻提要等功能。我想删除与用户相关联的所有节点。例如:新闻提要功能,我想在删除用户节点之前删除所有状态更新和关系。这是一个J2EE应用程序。我们使用spring-data neo4j。我们还使用Cypher查询检索数据。 - user2138493
似乎你需要类似于“级联删除”的功能。这必须在应用程序层面上完成。我不确定SDN如何处理此问题。在我们的框架Structr(http://structr.org)中,您可以将级联删除规则定义为bean模型的一部分。 - Axel Morgner
SDN不处理级联删除,Cypher比任何自定义配置语言更适合描述复杂的删除操作。 - Michael Hunger
1
您也可以后过滤类型,甚至带有参数: START n = node(3) MATCH n-[r]-() WHERE type(r) in ['FOO','BAR'] DELETE n, r - Michael Hunger

3

0

另一种方法是编写一个 Gremlin 脚本,从您的用户开始遍历图形,并将关系和要删除的节点放入两个集合中。如果您想删除所有内容,也许您可以在 Gremlin 中实现深度优先遍历并在遍历时进行删除。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接