У меня есть уникальный объект (: Neighborhood), который уникально появляется [: IN] a (: City). Я хотел бы создать новый соседний узел и установить его отношение ТОЛЬКО, если этот соседний узел не существует в этом городе. Могут быть несколько районов, имеющих одно и то же имя, но каждый район должен отображаться однозначно в собственном городе.Создайте команду NOT MATCH для CQL Neo4j?
После консультации с ответом Гила здесь: Return node if relationship is not present, как я могу сделать что-то вроде:
MATCH a WHERE NOT (a:Neighborhood {name : line.Neighborhood})-[r:IN]->(c:City {name : line.City})
ON MATCH SET (a)-[r]-(c)
Так тогда было бы только создать новый узел окрестности, если он уже не существует в городе.
** UPDATE: ** Я модернизировал и профилированного его и до сих пор не может воспользоваться любой оптимизаций ...
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 | |
+--------------+------+--------+---------------------------+------------------------------+
Как это выглядит, если вы измените 'LIMIT' на что-то вроде 5? Сколько строк в вашем CSV? –
@BrianUnderwood Вот как это выглядит, когда я делаю это с ограничением 5 – NumenorForLife
Еще один удар: есть ли указатель на 'Neighborhood.name'? –