我有这样一个查询:
放松{}数据与行MERGE(P:书{GUID:row.bookGuid})行设置p.name = row.name,P:科学
我想通过标签“科学”作为参数,因为这标签是不是同样为所有我传递{}数据行。
我想下面的查询,但是这是扔语法错误。
用参数,如:{GUID:1,名称: “testName1”,LABEL1: “Histroy”}
放松{}数据与行MERGE(P:书{GUID:row.bookGuid})行设置p.name = row.name,P:row.label1
任何解决方法吗?
谢谢
您可以使用APOC apoc.create.addLabels()
UNWIND {data} as row WITH row
MERGE (p:Book{guid:row.bookGuid})
SET p.name=row.name
CALL apoc.create.addLabels(id(p), [row.label1])
又如: 使用Cypher和APOC的属性值移动到标签
星爷它还不支持。 如果你想让它工作,你必须做一个黑客位使用FOREACH这你必须为每种类型的标签做的:
unwind {data} as row with row
FOREACH(ignoreMe IN CASE WHEN row.label = "Science" THEN [1] ELSE [] END |
MERGE (p:Book:Science{guid:row.bookGuid})
set p.name=row.name
)
FOREACH(ignoreMe IN CASE WHEN row.label = "Math" THEN [1] ELSE [] END |
MERGE (p:Book:Math{guid:row.bookGuid})
set p.name=row.name
)
等等...
我猜你可以以不同的结构数据:
(:Book {guid, name})-[:HAS_LABEL]->(:Label {name})
这样,您就可以使用标签名称为CREATE或匹配的查询参数。 您原来的查询是:
UNWIND {data} as row WITH row
MERGE (p:Book {guid: row.guid})
MERGE (l:Label {name: row.label})
CREATE UNIQUE p-[:HAS_LABEL]->l
SET p.name = row.name