【发布时间】:2019-06-12 19:10:01
【问题描述】:
我有这样的边缘:
(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)) "合并 (p:PrimaryConsumer) WHERE p.name = svc.name"
我 100% 确信这些名称是唯一的,并且将匹配现有节点集中的唯一消费者名称(待观察)。
当唯一节点属性匹配时,如何将现有属性添加到新数据? (我希望获得唯一的 ID,但我必须能够对匹配的新数据执行更新)
谢谢。
这是整个密码脚本 -- 根据@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
;
【问题讨论】: