如何删除具有重复属性的Neo4j节点?

12

在 Neo4j 2.1.6 中,我有一些节点在某个属性 inputID 方面是非唯一的。

使用 Cypher,如何删除所有在给定属性方面是重复的节点,只留下唯一的节点?

我尝试了以下方法...

MATCH (n:Input)
WITH n.inputID, collect(n) AS nodes
WHERE size(nodes) > 1
FOREACH (n in tail(nodes) | DELETE n)

...但它最终导致了...

Expression in WITH must be aliased (use AS) (line 2, column 6)
"WITH n.inputID, collect(n) AS nodes"
      ^
谢谢,
G
2个回答

18

你没有为那个 WITH 变量设置别名。请更改为:

WITH n.inputID, collect(n) AS nodes

变为:

WITH n.inputID AS inputID, collect(n) AS nodes

4

正如您所发现的那样,在集合上使用tail将使您删除重复项,不要忘记在节点之前删除关系(DETACH),并像FrobberOfBits提到的那样将字段命名为别名:

MATCH (n:Input)
WITH n.inputID AS inputID, collect(n) AS nodes
WHERE size(nodes) > 1
FOREACH (n in tail(nodes) | DETACH DELETE n)

这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - Bruno Peres
是的,我想评论FrobberOfBits的答案,建议添加“DETACH”位,但由于声望不够,我无法发表评论。我已将此作为注释添加,但某个名叫“Liam”的人删除了我的注释。 - Isaac Rosado

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