Neo4j 图数据库高级应用系列 / 服务器扩展指南 APOC (8.4) - 集合相关操作
1、概述
在Cypher查询语言中,集合的使用非常普遍。集合的元素可以是简单类型的值、节点、关系、路径,甚至混合类型。下面的例子是产生集合的一些常用方法:
// 返回一个包含从1到10 的整数集合
RETURN range(1,10) AS collection;
// 返回节点的集合
MATCH (n:Node)
RETURN collect(n) AS nodeColl
// 提取路径中的节点和关系集合
MATCH path = (from:Node) -[:REL]-> (to:Node)
RETURN nodes(path) AS nodeColl, relationships(path) AS relColl
2、函数和过程一览
APOC中集合相关过程和函数提供操作集合的丰富功能。列举如下:
类型 |
名称 |
说明 |
函数 |
apoc.coll.avg([0.5,1,2.3]) |
计算集合中的所有值的平均值。 |
函数 |
apoc.coll.combinations( |
从集合coll中,选择最少minSelect个元素、最多maxSelect个元素,生成它们的全组合子集返回。例如: |
函数 |
apoc.coll.contains(coll, value) |
如果集合coll包含值value则返回true。 |
函数 |
apoc.coll.containsAll(coll, values) |
使用HashSet优化的子集包含判断函数:如果指定集合coll中包含所有values则返回true,反之false。 |
函数 |
apoc.coll.containsAllSorted( |
在元素已排序的列表/集合coll中判断子集value是否存在的函数:使用了Collections.binarySearch。如果包含,返回true,反之false。 |
函数 |
apoc.coll.containsDuplicates(coll) |
如果集合包含重复元素,则返回true。 |
函数 |
apoc.coll.containsSorted(coll, value) |
在元素已排序的列表/集合coll中判断元素value是否存在的函数:使用了Collections.binarySearch。如果包含,返回true,反之false。 |
函数 |
apoc.coll.different(values) |
判断集合values中是否所有元素都是唯一的。如果是,返回true;如果有重复元素,则返回false。 |
函数 |
apoc.coll.disjunction(first, second) |
返回两个列表的析取集/或集。例如: RETURN apoc.coll.disjunction([1,2,3],[3,4]) 返回结果是:[1,2,4] |
函数 |
apoc.coll.duplicates(coll) |
返回集合中重复项的列表。 |
函数 |
apoc.coll.duplicatesWithCount( |
返回集合中重复元素(且仅返回重复元素)的列表及其计数,格式如下: |
函数 |
apoc.coll.flatten |
展开(一层)嵌套的数组元素。例如: 返回:[1,2,3,4] |
函数 |
apoc.coll.frequencies(coll) |
返回集合中所有元素的出现次数/频率,以数组类型返回数组,格式如下: |
函数 |
apoc.coll.frequenciesAsMap(coll) |
返回集合中所有元素的出现次数/频率,以MAP类型返回,格式如下: |
函数 |
apoc.coll.indexOf(coll, value) |
返回元素在集合/列表中的位置。 |
函数 |
apoc.coll.insert(coll, index, value) |
在集合coll的索引index处插入元素value。 |
函数 |
apoc.coll.insertAll(coll, index, values) |
在集合coll的索引index处插入集合values中所有元素。 |
函数 |
apoc.coll.intersection( |
返回两个集合/列表的唯一交集。 |
函数 |
apoc.coll.max([0.5,1,2.3]) |
返回集合中所有值的最大值。 |
函数 |
apoc.coll.min([0.5,1,2.3]) |
返回集合中所有值的最小值。 |
函数 |
apoc.coll.occurrences(coll, item) |
返回集合coll中给定项item的出现次数。 |
函数 |
apoc.coll.pairs(coll) |
返回集合coll中、以相邻两个元素构成的所有可能子集的集合。例如: RETURN apoc.coll.pairs([1,2,3]) 返回:[[1, 2], [2, 3], [3, null]] |
函数 |
apoc.coll.pairsMin(coll) |
类似apoc.coll.pairs,返回集合coll中、以相邻两个元素构成的所有可能子集,但是不包含NULL元素。例如: RETURN apoc.coll.pairsMin([1,2,3]) 返回:[[1, 2], [2, 3]] |
过程 |
apoc.coll.partition(list,batchSize) |
将列表list分区为子列表,每个子列表包含 batchSize个元素。如果最后一个子列表中包含的元素不够,也作为子集返回。例如: |
函数 |
apoc.coll.randomItem(coll) |
从集合/列表中随机选择并返回一个元素。 |
函数 |
apoc.coll.randomItems(coll, itemCount, allowRepick: false) |
从集合/列表中随机选择并返回itemCount个元素,允许重复选择元素。 |
函数 |
apoc.coll.remove(coll, index, [length=1]) |
从索引index处开始、删除length个元素。Length的缺省值为1。 |
函数 |
apoc.coll.removeAll(first, second) |
从第一个列表中删除在第二个列表中的指定的元素并返回。例如: RETURN apoc.coll.removeAll([1,2,3],[2]) |
函数 |
apoc.coll.reverse(coll) |
将集合/列表中元素顺序反转后返回。 |
函数 |
apoc.coll.set(coll, index, value) |
将集合coll中、位于index处的元素设置为value的值。 |
函数 |
apoc.coll.shuffle(coll) |
将集合中元素的顺序混排后返回。 |
函数 |
apoc.coll.sort(coll) |
对集合进行排序。 |
函数 |
apoc.coll.sortMaps([maps], 'key') |
对元素类型为MAP的集合进行排序:在排序字段前添加’ ^’ 表示升序排序。 |
函数 |
apoc.coll.sortMulti |
按几个排序字段对列表进行排序(使用^前缀升序),并可选择应用限制和跳过。 |
函数 |
apoc.coll.sortNodes([nodes], 'name') |
按属性排序节点,通过在属性名前添加‘^’ 来表示升序排序。 |
过程 |
apoc.coll.split(list,value) |
在集合/列表的给定值value处拆分集合,值本身不会是结果列表的一部分。例如: CALL apoc.coll.split([1,2,3],2) 返回结果: [1] [3] |
函数 |
apoc.coll.subtract(first, second) |
返回第一个集合/列表减去第二个集合/列表后的结果。 |
函数 |
apoc.coll.sum(coll) |
返回集合/列表中所有值的总和。 |
函数 |
apoc.coll.sumLongs(coll) |
返回集合/列表中的所有数值的总和,按长整型处理。 |
函数 |
apoc.coll.toSet([list]) |
将集合转换成列表。 |
函数 |
apoc.coll.union(first, second) |
返回集合first和second的并集,结果集合中不包含重复元素。 |
函数 |
apoc.coll.unionAll(first, second) |
返回集合first和second的并集,结果集合中包含重复元素。 |
函数 |
apoc.coll.zip([list1],[list2]) |
将两个集合中的元素成对组合成新集合。例如: RETURN apoc.coll.zip([1,2,3],[4,5]) 返回值:[[1, 4], [2, 5], [3, null]] |
过程 |
apoc.coll.elements(list,limit,offset) YIELD _1,_2, ...,_10, elements (共返回91个变量) 其中,_1,_2,..._10是原始元素,_1s,..._10s是字符串类型元素,_1i,..._10i是整数类型元素;f、m、l、n、r、p分别代表浮点、MAP、列表、节点、关系、路径类型。elements是实际返回的节点数。 最大可返回的每类元素为10。 |
将混合类型集合的元素,从位于offset起、到第limit截止的子集解构为正确类型的标识符。例如: CALL apoc.coll.elements( 这里,集合有6个元素,分别是:
我们从第1个offset/即第2个元素起,到第6个元素截止。返回结果(没有列出的变量值都为NULL): _1,_2,_3,_4,_5 "text1",2,3.002, ["a", "b"],true _1s "text1" _2i,3i 2,3 _2f,3f 2.0,3.002 _5b true _4l ["a", "b"] elements 5 |
注1:所有集合相关操作中,集合中元素的起始索引都是0。
Neo4j 图数据库高级应用系列 / 服务器扩展指南 APOC (8.4) - 集合相关操作相关推荐
- Neo4j图数据库高级应用系列 / 服务器扩展指南 APOC(5.5) - 导入JSON数据
1. 定义 Web API/RESTful API是访问和集成外部数据源又一种常用的接口.目前,很多网站和应用服务都提供类似开放接口供其他应用读取其数据,而这些接口都使用JSON[1]作为数据格式. ...
- Neo4j 图数据库高级应用系列 / 服务器扩展指南 APOC 8.8 - 图生成 完全图
1.概述 apoc.generate.complete 本过程生成一个完全图.完全图中,每个节点有到所有其他节点的边.在无向图中,有N个节点的完全图有N x (N – 1) / 2个边.Neo4j在存 ...
- Neo4j 图数据库高级应用系列 / 服务器扩展指南 APOC 8.5 - 图生成 / 随机图
1.概述 图生成过程用来生成不同类型的随机图,以用作算法研究.性能测试等目的.APOC提供下列随机图生成过程. 过程 说明 apoc.generate.er(noNodes, noEdges, 'la ...
- Neo4j 图数据库高级应用系列 / 服务器扩展指南 APOC 8.6 - 图生成 小世界模型
1.概述 WS小世界模型(Watts - Strogatz model)是一种随机图生成模型,其生成的图具有小世界属性,包括较短的平均节点间距离和高集聚系数.该模型由Duncan J. Watts(邓 ...
- Neo4j图数据库高级应用系列 / 服务器扩展指南 APOC(5.4) - 导出数据到Cypher脚本文件
APOC提供一系列过程实现将数据库中的数据导出到可执行的Cypher脚本文件.这些过程支持不同的导出逻辑: 导出所有数据 导出查询结果 导出特定标签节点和关系类型 导出一个graph对象 仅导出索引和 ...
- Neo4j 图数据库高级应用系列 / 服务器扩展指南 APOC 8.7 - 图生成 无标度网络
1.概述 Barabási和Albert(1999)的"富者更富"(Rich get richer)生成模型(BA模型)最被熟知的无标度网络子集的生成模型.它让每个网页根据一个非均 ...
- neo4j︱图数据库基本概念、操作罗列与整理(一)
图数据库常规的有:neo4j(支持超多语言).JanusGraph/Titan(分布式).Orientdb,google也开源了图数据库Cayley(Go语言构成).PostgreSQL存储RDF格式 ...
- Neo4j图数据库从入门到精通
add by zhj: 转载时,目录没整理好,还会跳转到原文 其实RDB也可以存储多对多的关系,使用的是中间表,GDB使用的是边,RDB中的实体存储在数据表,而GDB存储在节点.两者使用的底层技术不同 ...
- 知识图谱和Neo4j图数据库
一.知识图谱 互联网.大数据的背景下,谷歌.百度.搜狗等搜索引擎纷纷基于该背景,创建自己的知识图谱Knowledge Graph(谷歌).知心(百度)和知立方(搜狗),主要用于改进搜索质量. 1.什么 ...
最新文章
- 如何成为月入过万的斜杠青年
- [转]为什么Java中的HashMap默认加载因子是0.75
- Scanner如何接受char类型的数据
- 【转】tcp链接的状态
- 【Python教程】两种方法教你拆分含有多种分隔符的字符串
- Django常用命令总结(图片)
- python的函数结构_Python学习(四)常见函数及控制结构
- MySQL Replication Error 处理一例
- python 机器学习第一章
- Unity打开的文件是杂项文件的处理方法
- 计算机省二c语言编程改错题,2013年计算机二级C语言上机试题六十九
- ElasticSearch 2 (30) - 信息聚合系列之条形图
- 我从Python新手到大师的百天之路(内附学习资源)
- 微信翻译生日快乐的代码_新套路,微信这个翻译功能还能帮你表白,快学起来!...
- 陀螺仪-加速计-磁力计
- win2003系统的序列号
- 耳麦没声音,耳麦不能说话
- Java EasyPoi简单报表+复合表头报表的导出
- 迅雷启动慢 解决方法
- win11 自带远程桌面使用(包含非局域网使用以及win11升级为专业版)