大家圣诞节,
我有一个简单的问题。我想在Neo4j中删除有/无关系的节点,并返回已删除的节点和/或其特定属性。以下几行中的内容(下面不起作用)
MATCH(j:JOB) where j.job_id= "1" DELETE j, return j;
我可以在两个不同的请求中执行上述任务,查询要删除的节点然后将其删除但是,我想知道是否可以在单个语句中执行此操作。
我想知道是否有办法将节点存储在不同的placehoder中,然后删除节点并返回占位符。我是Neo4j的新手,需要建议。
我遇到了post这个旧的,我无法使用我的Neo4j版本。我使用的是Neo4j 2.3.1
答案 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。