Neo4j -批量编辑节点属性-即批量编辑所有键(n)



我正在尝试执行一些数据清理,我正在寻找一种方法来大量编辑一组节点上的所有属性键。在我的例子中,我想让所有的键(n)都大写,并用"_"代替空格。无论列名如何

下面的集合执行此操作,但假设您知道键的具体名称。

MATCH (c:Category)
UNWIND keys = collKeys
SET c.COMPANY = c.Company   
REMOVE c.Company
return c limit 1000

下面构建了一个当前键的列表,然后是我想要的标签。我只是不确定如何正确调整SET。我正试图找到一种方法来执行像下面的东西大写我所有的键(c)

//设置replace (toUPPER (c.Company),", ">") = REPLACE(toUPPER(c.Company),",">")

MATCH (c:Category)
UNWIND keys(c) as collKeys
WITH DISTINCT collKeys
WITH collKeys, REPLACE(toUPPER(collKeys)," ", "_") as collUPPERKeys
WHERE collKeys <> 'source'
SET c.collUPPERKeys = REPLACE(toUPPER(c.collKeys)," ", "_")    //<-- this is where I'm struggling as c.collUPPERKeys doesn't make sense
REMOVE c.collKeys
return  c

我意识到最佳实践是在导入时执行此操作,但我还没有访问该代码,尽管我打算在数据加载时执行此操作。

提前致谢

edit -是否有一个apoc函数可以做到这一点?

你将需要APOC来创建动态属性:看看下面的帖子:https://dzone.com/articles/neo4j-dynamically-add-propertyset-dynamic-property

CALL apoc.create.setProperty(c, collUPPERKeys, replace(...))

类似地,对于删除动态属性,您也需要APOC。

CALL apoc.create.removeProperties(c, collKeys)

产量节点

如果我们把它们放在一起:

MATCH (c:Category)
WITH c 
UNWIND keys(c) as collKeys
WITH collKeys,c
WITH collKeys, REPLACE(toUPPER(collKeys)," ", "_") as collUPPERKeys,c
WHERE collKeys <> 'source'
// set dynamic properties
CALL apoc.create.setProperty(c, collUPPERKeys, replace(toUPPER(c.collKeys)," ", "_")) YIELD node as foo
// remove dynamic properties
CALL apoc.create.removeProperties(c, [collKeys]) YIELD node
return c

最新更新