SET标签:合格标签名称为参数(SET label : pass label name as par

2019-10-21 08:19发布

我有这样一个查询:

放松{}数据与行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

任何解决方法吗?

谢谢

Answer 1:

您可以使用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的属性值移动到标签



Answer 2:

星爷它还不支持。 如果你想让它工作,你必须做一个黑客位使用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
)

等等...



Answer 3:

我猜你可以以不同的结构数据:

(: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


文章来源: SET label : pass label name as parameter