我在Neo4j中做了一些错误的动作,现在我们有一个重复节点的图表。在重复对中,完整属性集属于该对中的第一个,并且所有关系都属于该对中的第二个。索引是node_auto_index。
节点:
Id Name Age From Profession
1 Bob 23 Canada Doctor
2 Amy 45 Switzerland Lawyer
3 Sam 09 US
4 Bob
5 Amy
6 Sam
关系:
Id Start End Type
1 4 6 Family
2 5 6 Family
3 4 5 Divorced
我正在努力避免重做整批导入。有没有办法根据“name”字符串属性合并cypher中的节点,同时保留所有属性和关系?
谢谢!
答案 0 :(得分:1)
好吧,我想我弄清楚了:
START first=node(*), second=node(*)
WHERE has(first.Name) and has(second.Name) and has(second.Age) and NOT(has(first.Age))
WITH first, second
WHERE first.Name= second.Name
SET first=second
查询仍在处理中,但有更有效的方法吗?
答案 1 :(得分:1)
您在这两组之间创建了一个交叉产品,因此价格昂贵。最好是对名称进行索引查找。
START first=node(*), second=node(*)
WHERE has(first.Name) and has(second.Name) and has(second.Age) and NOT(has(first.Age))
WITH first, second
SKIP 20000 LIMIT 20000
WHERE first.Name= second.Name
SET first=second
你可能还必须对处理进行分页。
START n=node:node_auto_index("Name:*")
WITH n.Name, collect(n) nodes
SKIP 20000 LIMIT 20000
WHERE length(nodes) == 2
WITH head(filter(x in nodes : not(has(x.Age)))) as first, head(filter(x in nodes : has(x.Age))) as second
SET first=second