neo4j - Neo4j - 批量编辑节点属性 - 即批量编辑所有键(n)
问题描述
我正在尝试执行一些数据清理,并且正在寻找一种方法来批量编辑一组节点上的所有属性键。就我而言,我想将所有键(n)设为大写并用“_”替换空格,而不管列名如何。
以下集合执行此操作,但假设您知道密钥的特定名称。
MATCH (c:Category)
UNWIND keys = collKeys
SET c.COMPANY = c.Company
REMOVE c.Company
return c limit 1000
以下构建了当前键的列表,然后构建了我想要的标签。我只是不确定如何正确调整 SET。我正在尝试找到一种方法来对我所有的键(c)执行以下操作
//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
我意识到最佳做法是在导入时执行此操作,但我目前还无法访问该代码,尽管我打算在数据加载时执行此操作。
提前谢谢了
编辑-是否有一个 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
推荐阅读
- java - 将 Json 字符串转换为 JSONArray
- javascript - WP Block Styles - 选择块样式时触发 JS
- python-3.x - 当索引有名称时,使用 Pandas 的 doctest 函数不起作用
- vb.net - 集合到 vb.net 中的 string() 转换
- javascript - GET请求nodejs reactjs上的410(消失)错误
- c++ - 函数末尾的断点
- packer - 在打包器中,如何在不调用函数的情况下在字符串中添加文字大括号 {{}}?
- java - 我无法让 RecyclerView 在底部导航内的片段上显示它的项目。我阅读了有关它的所有主题,但没有任何效果
- machine-learning - 如何根据输入形状定义 conv2D 大小
- python-3.x - 在类型提示中使用 Type[class_name] 而不仅仅是 class_name 时,python 未解析的属性引用