美文网首页
在Neo4j中怎样使用APOC函数来过滤字典中的Key

在Neo4j中怎样使用APOC函数来过滤字典中的Key

作者: 今天无Bug | 来源:发表于2019-06-23 23:09 被阅读0次

    译者言:本文介绍了在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/ 译者言: 如果我的描述有不准确或不清楚的地方,欢迎在文章下进行交流。

    相关文章

      网友评论

          本文标题:在Neo4j中怎样使用APOC函数来过滤字典中的Key

          本文链接:https://www.haomeiwen.com/subject/nbkgqctx.html