Criar no comando NOT MATCH para o CQL do Neo4j?
Eu tenho um nó não exclusivo (: Bairro) que aparece exclusivamente [: IN] um nó (: Cidade). Eu gostaria de criar um novo nó de vizinhança e estabelecer seu relacionamento SOMENTE se esse nó de vizinhança não existir nessa cidade. Pode haver vários bairros com o mesmo nome, mas cada bairro deve aparecer exclusivamente na cidade da propriedade.
Seguindo o conselho da resposta de Gil aqui:Nó de retorno se o relacionamento não estiver presente, como posso fazer algo como:
MATCH a WHERE NOT (a:Neighborhood {name : line.Neighborhood})-[r:IN]->(c:City {name : line.City})
ON MATCH SET (a)-[r]-(c)
Então, ele criaria apenas um novo nó de vizinhança se ele ainda não existir na cidade.
** UPDATE: ** Eu atualizei e criei o perfil e ainda não posso tirar proveito de nenhuma otimização ...
PROFILE LOAD CSV WITH HEADERS FROM "file://THEFILE" as line
WITH line LIMIT 0
MATCH (c:City { name : line.City})
MERGE (n:Neighborhood {name : toInt(line.Neighborhood)})-[:IN]->(c)
;
+--------------+------+--------+---------------------------+------------------------------+
| Operator | Rows | DbHits | Identifiers | Other |
+--------------+------+--------+---------------------------+------------------------------+
| EmptyResult | 0 | 0 | | |
| UpdateGraph | 5 | 16 | anon[340], b, neighborhood, line | MergePattern |
| SchemaIndex | 5 | 10 | b, line | line.City; :City(name) |
| ColumnFilter | 5 | 0 | line | keep columns line |
| Filter | 5 | 0 | anon[216], line | anon[216] |
| Extract | 5 | 0 | anon[216], line | anon[216] |
| Slice | 5 | 0 | line | { AUTOINT0} |
| LoadCSV | 5 | 0 | line | |
+--------------+------+--------+---------------------------+------------------------------+