У меня есть такие ребра:
(People)-[:USE]->(Product)
(People)-[:REVIEW]->(Product)
Теперь у меня есть новый CSV из людей, которые являются рецензентами, но им не хватает некоторых атрибутов, которые у меня уже есть.
Я хочу сделать что-то вроде:
LOAD CSV WITH HEADERS FROM "file:///abcd.csv" AS row
MERGE (svc:Consumer {name: row.referring_name})
ON CREATE SET
svc.skewNum = toInteger(row.skew_num)
MERGE (p:PrimaryConsumer) WHERE p.name = svc.name
ON MATCH SET
svc.city = p.city,
svc.latitude = toFloat(p.latitude),
svc.longitude = toFloat(p.longitude),
svc.consumerId = toInteger(p.primaryConsumerId)
Какие борки:
Neo.ClientError.Statement.SyntaxError: Неверный ввод 'H': ожидаемое 'i / I' (строка 10, столбец 28 (смещение: 346))
"MERGE (p: PrimaryConsumer), ГДЕ p.name = svc.name"
Я на 100% уверен, что имена уникальны и будут соответствовать уникальному имени потребителя в существующем наборе узлов (будет видно).
Как бы я добавил существующие атрибуты к новым данным, когда у меня есть совпадение по уникальным атрибутам узла? (Я надеюсь получить уникальные идентификаторы, но я должен иметь возможность выполнить обновление новых данных на совпадение)
Спасибо.
Это весь скрипт cypher - модифицированный согласно вводу @ cypher.
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///abcde.csv" AS row
MERGE (svc:Consumer {name: row.referring_name})
ON CREATE SET
svc.skeyNum = toInteger(row.skew_num)
MATCH (p:primaryConsumer {name: svc:name})
ON MATCH SET
svc.city = p.city,
svc.latitude = toFloat(p.latitude),
svc.longitude = toFloat(p.longitude),
svc.providerId = toInteger(p.providerId)
MERGE (spec:Product {name: row.svc_prod_name})
ON CREATE SET
spec.name = row.svc_prov_name,
spec.skew = toInteger(row.skew_id),
spec.city = row.svc_prov_city,
spec.totalAllowed = toFloat(row.total_allowed)
MERGE (svc)-[r:CONFIRMED_PURCHASE]->(spec)
ON MATCH SET r.totalAllowed = r.totalAllowed + spec.totalAllowed
ON CREATE SET r.totalAllowed = spec.totalAllowed
;