Supponiamo che io ho un nodo con una collezione in una proprietà, diconoCypher: analogo di `sort -u` per unire 2 collezioni?
START x = node(17) SET x.c = [ 4, 6, 2, 3, 7, 9, 11 ];
e da qualche parte (cioè da file .csv) ottengo un altro insieme di valori, dico
c1 = [ 11, 4, 5, 8, 1, 9 ]
sto trattando le mie collezioni come set, l'ordine degli elementi non ha importanza. Quello di cui ho bisogno è di unire x.c con c1 con l'operazione come magic in modo che il risultato x.c conterrà solo elementi distinti da entrambi. La seguente idea viene in mente (ancora sottoposti a verifica):
LOAD CSV FROM "file:///tmp/additives.csv" as row
START x=node(TOINT(row[0]))
MATCH c1 = [ elem IN SPLIT(row[1], ':') | TOINT(elem) ]
SET
x.c = [ newxc IN x.c + c1 WHERE (newx IN x.c AND newx IN c1) ];
Questo non funziona, darà un incrocio, ma non un insieme di elementi distinti. Altro RTFM offre un'altra idea: utilizzare REDUCE()? ma come?
Come estendere Cypher con una nuova funzione incorporata UNIQUE() che accetta la raccolta e la restituzione della raccolta, i duplicati della forma pulita?
UPD. Sembra che il filtro() è qualcosa di vicino, ma ancora una volta intersezione :(
x.c = FILTER(newxc IN x.c + c1 WHERE (newx IN x.c AND newx IN c1))
WBR, Andrii
GMM grazie per il puntatore direzione giusta, dovrei [leggere la documentazione meglio: c'è "Creare una raccolta distinta" capitolo laggiù] (http://neo4j.com/docs/stable/query-unwind.html#unwind-create-a-distinct-collection) :) – stesin
a volte dovrei leggere anche questa –
buona risposta, questo è più efficiente di ridurre penso –