title: Unique constraints on node properties after the fact
body: <p>I have a site in beta and it includes nodes called Topics. I forgot to add the unique constraint to the name property and now there are duplicates of nodes. I used MERGE hoping it would find the unique names and just add the relationships but apparently that isn't the case. Is there anyway to merge all the relationships to a single node and then remove the duplicates so I can add the constraint once its cleaned up?</p>
  
  <p>I found this but I have multiple nodes with different relationships. Anyone know how to modify it to work for my situation?</p>
  
  <p>//Edit</p>
  
  <p>Using Michael's code, I modified the block to this:</p>
  
  <pre><code>MATCH (t:Topic)
  WITH t.name as name, collect(t) as topics, count(*) as cnt
  WHERE cnt &gt; 1
  WITH head(topics) as first, tail(topics) as rest
  LIMIT 1000
  UNWIND rest AS to_delete
  OPTIONAL MATCH (to_delete)-[r:TOPIC_OF]-&gt;(g:Group)
  FOREACH (x in case when r is null then [] else [1] |
     MERGE (first)-[new_r:TOPIC_OF]-&gt;(g)
     // in case you have to copy-rel-properties
     SET new_r = r
     DELETE r
  )
  OPTIONAL MATCH (to_delete)&lt;-[r2:INTEREST_OF]-(p:Person)
  FOREACH (x in case when r2 is null then [] else [1] |
     MERGE (first)-[new_r2:INTEREST_OF]-&gt;(p)
     // in case you have to copy-rel-properties
     SET new_r2 = r2
     DELETE r2
  )
  
  OPTIONAL MATCH (to_delete)&lt;-[r3:SKILL_OF]-(p:Person)
  FOREACH (x in case when r3 is null then [] else [1] |
     MERGE (first)-[new_r3:SKILL_OF]-&gt;(p)
     // in case you have to copy-rel-properties
     SET new_r3 = r3
     DELETE r3
  )
  
  OPTIONAL MATCH (to_delete)-[r4:TOPIC]-&gt;(p:Project)
  FOREACH (x in case when r4 is null then [] else [1] |
     MERGE (first)-[new_r4:TOPIC]-&gt;(p)
     // in case you have to copy-rel-properties
     SET new_r4 = r4
     DELETE r4
  )
  
  OPTIONAL MATCH (to_delete)-[r5:NEEDS]-&gt;(p:Project)
  FOREACH (x in case when r5 is null then [] else [1] |
     MERGE (first)-[new_r5:NEEDS]-&gt;(p)
     // in case you have to copy-rel-properties
     SET new_r5 = r5
     DELETE r5
  )
  DELETE to_delete
  RETURN count(*);
  </code></pre>
  
  <p>I am getting an error while running it:</p>
  
  <pre><code>Invalid input '|': expected whitespace, comment, '.', node labels, '[', "=~", IN, STARTS, ENDS, CONTAINS, IS, '^', '*', '/', '%', '+', '-', '=', "&lt;&gt;", "!=", '&lt;', '&gt;', "&lt;=", "&gt;=", AND, XOR, OR or END (line 8, column 52 (offset: 276))
  "FOREACH (x in case when r is null then [] else [1] |"
  </code></pre>
  
  <p>What am I missing?</p>