Neo4j删除一个节点并返回已删除的节点

时间:2015-12-26 15:09:00

标签: neo4j cypher

大家圣诞节,

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

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

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

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

我遇到了post这个旧的,我无法使用我的Neo4j版本。我使用的是Neo4j 2.3.1

3 个答案:

答案 0 :(得分:9)

您可以使用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

答案 1 :(得分:2)

可能有一种更简单的方法可以达到你想要的效果。

不是复制节点,为什么不让它保持不变,更改其标签(因此它不会干扰模型的其余部分)然后返回该节点?

这样的事情:

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

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

答案 2 :(得分:1)

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

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

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