【问题标题】:Neo4j delete a node and return the deleted nodeNeo4j 删除一个节点并返回删除的节点
【发布时间】:2015-12-26 15:09:00
【问题描述】:

大家圣诞节,

我有一个简单的问题。我想删除 Neo4j 中具有/不具有关系的节点并返回已删除的节点和/或其特定属性。以下几行中的内容(以下不起作用)

MATCH(j:JOB) where j.job_id= "1" DELETE j, return j;  

我可以在两个不同的请求中完成上述任务,查询要删除的节点然后将其删除,但是我想知道是否可以在单个语句中完成。

我想知道是否有办法将节点存储在不同的占位符中,然后删除节点并返回占位符。我是 Neo4j 的新手,需要建议。

我遇到了这个旧的 post,我无法让它与我的 Neo4j 版本一起使用。我使用 Neo4j 2.3.1

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    您可以使用WITH 子句为要返回的数据(属性)设置别名,并在同一查询中删除节点:

    //WITH j, needed to add j after WITH for cypher to work.
    
    MATCH(j:Job) where j.job_id = "1" 
    WITH j, j.industry AS industry, j.name AS name
    DELETE j
    RETURN industry, name
    

    this answer

    【讨论】:

    • 谢谢你,William,正是我想要的,虽然我不得不更改查询以在 WITH 关键字之后添加 j
    • 这没关系,对于 1 或 2 个属性,但如果我想获得所有属性怎么办?
    【解决方案2】:

    可能有更简单的方法来完成你想要的。

    与其复制节点,不如将其保持不变,更改其标签(这样它就不会干扰模型的其余部分),然后返回该节点?

    类似这样的:

    MATCH (j:JOB { job_id = '1' })
    OPTIONAL MATCH (j)-[r]-(n)
    REMOVE j:JOB
    DELETE r
    SET j:RecycleBin_JOB
    RETURN j;
    

    复制节点来存储它似乎是浪费时间,因为您已经有了一个。只需返回那个,并调整标签和关系,使其不会干扰模型的其余部分。

    【讨论】:

    • 这绝对是一种方法,但是,我删除的节点有关系,你的解决方案在那里不可行(除非我删除关系),在这种情况下我需要两个查询。
    【解决方案3】:

    如果你想要删除节点的所有属性。这可能对你有帮助

    Match (n:Product)
    WITH n, properties(n) AS m
    DETACH DELETE n
    RETURN m
    

    我遇到了类似的问题,上面的代码对我有用,Good Day。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-04
      • 1970-01-01
      相关资源
      最近更新 更多