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
)

从集合coll中,选择最少minSelect个元素、最多maxSelect个元素,生成它们的全组合子集返回。例如:
RETURN apoc.coll.combinations([1,2,3], 2,3)
会返回:
[[1, 2], [1, 3], [2, 3], [1, 2, 3]]

函数

apoc.coll.contains(coll, value)

如果集合coll包含值value则返回true。

函数

apoc.coll.containsAll(coll, values)

使用HashSet优化的子集包含判断函数:如果指定集合coll中包含所有values则返回true,反之false。

函数

apoc.coll.containsAllSorted(
  coll, value
)

在元素已排序的列表/集合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(
  coll
)

返回集合中重复元素(且仅返回重复元素)的列表及其计数,格式如下:
[{item:xyz, count:2},
 {item:zyx, count:5}]

函数

apoc.coll.flatten

展开(一层)嵌套的数组元素。例如:
RETURN apoc.coll.flatten([1,[2,3],4])

返回:[1,2,3,4]

函数

apoc.coll.frequencies(coll)

返回集合中所有元素的出现次数/频率,以数组类型返回数组,格式如下:
[{item:xyz, count:2},
 {item:zyx, count:5},
 {item:abc, count:1}])

函数

apoc.coll.frequenciesAsMap(coll)

返回集合中所有元素的出现次数/频率,以MAP类型返回,格式如下:
{1: 2, 3: 2}

函数

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(
  first, second
)

返回两个集合/列表的唯一交集。

函数

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个元素。如果最后一个子列表中包含的元素不够,也作为子集返回。例如:
CALL apoc.coll.partition([1,2,3],2)
返回:[1,2],[3]

函数

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])
返回结果:[1,3]

函数

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,
_1s, ...,_10s,
_1i, ...,_10i,
_1f, ...,_10f,
_1m, ...,_10m,
_1l, ...,_10l,
_1n, ...,_10n,
_1r, ...,_10r,
_1p, ...,_10p,

elements

(共返回91个变量)

其中,_1,_2,..._10是原始元素,_1s,..._10s是字符串类型元素,_1i,..._10i是整数类型元素;f、m、l、n、r、p分别代表浮点、MAP、列表、节点、关系、路径类型。elements是实际返回的节点数。

最大可返回的每类元素为10。

将混合类型集合的元素,从位于offset起、到第limit截止的子集解构为正确类型的标识符。例如:

CALL apoc.coll.elements(
  [1,'text1',2,3.002,['a','b'],true],
  5,1
)

这里,集合有6个元素,分别是:

  1. 1 – Integer
  2. ‘text1’ – String
  3. 2 – Integer
  4. 3.002 – Float
  5. [‘a’,’b’] – List
  6. true – Boolean

我们从第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) - 集合相关操作相关推荐

  1. Neo4j图数据库高级应用系列 / 服务器扩展指南 APOC(5.5) - 导入JSON数据

    1. 定义 Web API/RESTful API是访问和集成外部数据源又一种常用的接口.目前,很多网站和应用服务都提供类似开放接口供其他应用读取其数据,而这些接口都使用JSON[1]作为数据格式. ...

  2. Neo4j 图数据库高级应用系列 / 服务器扩展指南 APOC 8.8 - 图生成 完全图

    1.概述 apoc.generate.complete 本过程生成一个完全图.完全图中,每个节点有到所有其他节点的边.在无向图中,有N个节点的完全图有N x (N – 1) / 2个边.Neo4j在存 ...

  3. Neo4j 图数据库高级应用系列 / 服务器扩展指南 APOC 8.5 - 图生成 / 随机图

    1.概述 图生成过程用来生成不同类型的随机图,以用作算法研究.性能测试等目的.APOC提供下列随机图生成过程. 过程 说明 apoc.generate.er(noNodes, noEdges, 'la ...

  4. Neo4j 图数据库高级应用系列 / 服务器扩展指南 APOC 8.6 - 图生成 小世界模型

    1.概述 WS小世界模型(Watts - Strogatz model)是一种随机图生成模型,其生成的图具有小世界属性,包括较短的平均节点间距离和高集聚系数.该模型由Duncan J. Watts(邓 ...

  5. Neo4j图数据库高级应用系列 / 服务器扩展指南 APOC(5.4) - 导出数据到Cypher脚本文件

    APOC提供一系列过程实现将数据库中的数据导出到可执行的Cypher脚本文件.这些过程支持不同的导出逻辑: 导出所有数据 导出查询结果 导出特定标签节点和关系类型 导出一个graph对象 仅导出索引和 ...

  6. Neo4j 图数据库高级应用系列 / 服务器扩展指南 APOC 8.7 - 图生成 无标度网络

    1.概述 Barabási和Albert(1999)的"富者更富"(Rich get richer)生成模型(BA模型)最被熟知的无标度网络子集的生成模型.它让每个网页根据一个非均 ...

  7. neo4j︱图数据库基本概念、操作罗列与整理(一)

    图数据库常规的有:neo4j(支持超多语言).JanusGraph/Titan(分布式).Orientdb,google也开源了图数据库Cayley(Go语言构成).PostgreSQL存储RDF格式 ...

  8. Neo4j图数据库从入门到精通

    add by zhj: 转载时,目录没整理好,还会跳转到原文 其实RDB也可以存储多对多的关系,使用的是中间表,GDB使用的是边,RDB中的实体存储在数据表,而GDB存储在节点.两者使用的底层技术不同 ...

  9. 知识图谱和Neo4j图数据库

    一.知识图谱 互联网.大数据的背景下,谷歌.百度.搜狗等搜索引擎纷纷基于该背景,创建自己的知识图谱Knowledge Graph(谷歌).知心(百度)和知立方(搜狗),主要用于改进搜索质量. 1.什么 ...

最新文章

  1. 如何成为月入过万的斜杠青年
  2. [转]为什么Java中的HashMap默认加载因子是0.75
  3. Scanner如何接受char类型的数据
  4. 【转】tcp链接的状态
  5. 【Python教程】两种方法教你拆分含有多种分隔符的字符串
  6. Django常用命令总结(图片)
  7. python的函数结构_Python学习(四)常见函数及控制结构
  8. MySQL Replication Error 处理一例
  9. python 机器学习第一章
  10. Unity打开的文件是杂项文件的处理方法
  11. 计算机省二c语言编程改错题,2013年计算机二级C语言上机试题六十九
  12. ElasticSearch 2 (30) - 信息聚合系列之条形图
  13. 我从Python新手到大师的百天之路(内附学习资源)
  14. 微信翻译生日快乐的代码_新套路,微信这个翻译功能还能帮你表白,快学起来!...
  15. 陀螺仪-加速计-磁力计
  16. win2003系统的序列号
  17. 耳麦没声音,耳麦不能说话
  18. Java EasyPoi简单报表+复合表头报表的导出
  19. 迅雷启动慢 解决方法
  20. win11 自带远程桌面使用(包含非局域网使用以及win11升级为专业版)

热门文章

  1. 宝藏软件:Cloud Drive「阿里云盘」变成电脑本地磁盘
  2. 【沪江日语电台】Love Love J-popVol.2
  3. Android自动接听和挂断电话实现原理
  4. win10自带的截屏和录屏
  5. 【课堂笔记】AE文字特效
  6. PHP 表单处理和用户输入
  7. 如何用1角、2角和5角的硬币凑出10元以下的金额
  8. JavaScript学习笔记1
  9. android 壁纸服务,Android开发学习之WallPaper设置壁纸详细介绍与实例
  10. 量化双均线策略:(二)判断买入卖出信号