我最近在处理的图上遇到问题,因为我没有应用任何唯一的约束 ,我设法创建了重复的节点。
我想删除重复项,并遇到了吉米·鲁茨(Jimmy Ruts)的精彩文章 ,其中显示了一些方法。
让我们首先创建一个包含一些重复节点的图形:
UNWIND range(0, 100) AS id
CREATE (p1:Person {id: toInteger(rand() * id)})
MERGE (p2:Person {id: toInteger(rand() * id)})
MERGE (p3:Person {id: toInteger(rand() * id)})
MERGE (p4:Person {id: toInteger(rand() * id)})
CREATE (p1)-[:KNOWS]->(p2)
CREATE (p1)-[:KNOWS]->(p3)
CREATE (p1)-[:KNOWS]->(p4)
Added 173 labels, created 173 nodes, set 173 properties, created 5829 relationships, completed after 408 ms.
我们如何找到重复的节点?
MATCH (p:Person)
WITH p.id as id, collect(p) AS nodes
WHERE size(nodes) > 1
RETURN [ n in nodes | n.id] AS ids, size(nodes)
ORDER BY size(nodes) DESC
LIMIT 10
╒══════════════════════╤═════════════╕
│"ids" │"size(nodes)"│
╞══════════════════════╪═════════════╡
│[1,1,1,1,1,1,1,1] │8 │
├──────────────────────┼─────────────┤
│[0,0,0,0,0,0,0,0] │8 │
├──────────────────────┼─────────────┤
│[17,17,17,17,17,17,17]│7 │
├──────────────────────┼─────────────┤
│[4,4,4,4,4,4,4] │7 │
├──────────────────────┼─────────────┤
│[2,2,2,2,2,2] │6 │
├──────────────────────┼─────────────┤
│[5,5,5,5,5,5] │6 │
├──────────────────────┼─────────────┤
│[19,19,19,19,19,19] │6 │
├──────────────────────┼─────────────┤
│[11,11,11,11,11] │5 │
├──────