网站首页 > 技术文章 正文
译者言:本文介绍了在Neo4j中操作字典类型数据的三个APOC函数apoc.map.clean, apoc.map.values, apoc.map.fromLists。
我们有这样一个场景,需要创建一个节点,但节点的属性要从一个字典对象中获取,这个如何实现呢?我们假设APOC库已安装。
首先,我们创建一个包含有我Twitter信息的字典对象。
:param document => { id: 14707949, name: "Mark Needham", username: "markhneedham", bio: "Developer Relations @neo4j", location: "London, United Kingdom", url: "http://www.markhneedham.com", join_date: "8 May 2008", join_time: "5:58 PM", tweets: 24710, following: 2479, followers: 5054, likes: 1014 }
译者言:我们可以通过 :params 这个命令看到上面创建字典对象
我们要基于上面这些数据创建一个User节点,但是只想使用其中部分键值。此时,我们可以使用apoc.map.clean 函数删除一些键,下面代表显示了我将删除join_date 和 join_time 键。
WITH ["join_date", "join_time"] AS keysToRemove RETURN apoc.map.clean($document, keysToRemove, []) AS result
删除键是一种方法,还有另一种方法是指定需要使用的键。 通过apoc.help('apoc.map') 能找到所有字典相关的方法,但是很不幸,并没有发现取指定键值的方法。
但是我们可以将两个APOC函数组合起来使用完成这个效果。首先使用apoc.map.values函数,将字典对象中一组指定键的值提取到一个数组中。
WITH ["name", "username", "bio", "following", "followers"] AS keysToKeep RETURN apoc.map.values($document, keysToKeep)
然后,再使用apoc.map.fromLists 函数重构出一个新的字典对象。
WITH ["name", "username", "bio", "following", "followers"] AS keysToKeep RETURN apoc.map.fromLists(keysToKeep, apoc.map.values($document, keysToKeep)) AS result
好,最后,我们再来看看文章开始的需求:创建一个结点,使用一个字典中指定键的值作为该结点的属性。代码如下:
WITH ["name", "username", "bio", "following", "followers"] AS keysToKeep MERGE (u:User {id: $document.id }) SET u += apoc.map.fromLists($keysToKeep, apoc.map.values($document, $keysToKeep))
OK,一切顺利,希望这些能帮助到你。
原文链接:https://markhneedham.com/blog/2019/05/12/neo4j-keep-filter-keys-map-apoc/ 译者言: 如果我的描述有不准确或不清楚的地方,欢迎在文章下进行交流。
猜你喜欢
- 2024-09-18 SQLSERVER:INSERT、UPDATE、DELETE操作
- 2024-09-18 牛逼!2021 最新 Spring 面试题(spring面试题汇集与答案)
- 2024-09-18 为什么 MySQL 不推荐使用 join?(为啥mysql)
- 2024-09-18 MySQL中带子查询的删除操作(mysql子查询语句举例)
- 2024-09-18 VBA数组与字典解决方案第27讲:两列数据相互去掉重复值后合并
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)