【问题标题】:Delete all relations and connected nodes in Neo4j for a user为用户删除 Neo4j 中的所有关系和连接节点
【发布时间】:2013-03-07 23:16:13
【问题描述】:

我们选择 neo4j 作为我们 Web 应用程序的数据库。用户有大量的关系和连接的节点。截至目前,一个用户大约有 20 个关系。其中一项功能是新闻源功能。如果我想完全删除用户,密码查询是最好的删除方式还是有其他选择?

由于我们仍在计划添加新功能,因此与用户连接的关系和节点也会增加。因此,如果我们使用密码查询,则必须针对添加的每个新关系修改查询。请指教。

谢谢, 帕万

【问题讨论】:

    标签: neo4j spring-data-neo4j


    【解决方案1】:

    是的,您可以使用 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。我们还使用密码查询来检索数据。
    • 似乎您需要类似“级联删除”的东西。这必须在应用程序级别完成。我不确定SDN如何处理这个问题。在我们的框架 Structr (structr.org) 中,您可以将级联删除规则定义为 bean 模型的一部分。
    • SDN 不处理级联删除,cypher 比任何自定义配置语言更擅长描述复杂的删除操作。
    • 你也可以事后过滤类型,即使有参数:START n = node(3) MATCH n-[r]-() WHERE type(r) in ['FOO','BAR'] DELETE n, r
    【解决方案2】:

    从 Neo4j 2.3 开始,还有另一种方法可以做到这一点:

    MATCH (n { name:'Andres' })
    DETACH DELETE n
    

    我在文档中找到了这个示例:http://neo4j.com/docs/stable/query-delete.html

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2012-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多