Создать на NOT MATCH команду для CQL Neo4j?
У меня есть неуникальный узел (: Соседство), который однозначно появляется [: IN] a (: City). Я хотел бы создать новый соседский узел и установить его связь ТОЛЬКО, если этот соседский узел не существует в этом городе. Может быть несколько районов с одинаковыми именами, но каждый район должен отображаться уникальным образом в городе собственности.
Следуя совету Джила, ответ здесь:Вернуть узел, если связь отсутствуетКак я могу сделать что-то вроде:
MATCH a WHERE NOT (a:Neighborhood {name : line.Neighborhood})-[r:IN]->(c:City {name : line.City})
ON MATCH SET (a)-[r]-(c)
Тогда он создаст новый соседский узел, только если он еще не существует в городе.
** ОБНОВЛЕНИЕ: ** Я обновил и профилировал его и до сих пор не могу воспользоваться какой-либо оптимизацией ...
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 | |
+--------------+------+--------+---------------------------+------------------------------+