Neo4j中如何对collect聚合生成的权限数组进行排序?
解决Neo4j中collect数组排序问题
要让permission数组按A、B、C、D的字典序排列,有两种常用方法:
方法一:原生Cypher先排序再收集
核心思路是先对每个资源对应的权限类型单独排序,再执行collect聚合。修改后的查询语句如下:
MATCH (r:Class {Name: 'A'})-[perm]->(res:source) WITH res.Name AS resource, type(perm) AS permType ORDER BY resource, permType RETURN resource, collect(permType) AS permission
原理说明:
- 先用
WITH拆分资源名和权限类型,同时按资源名+权限类型排序,确保同一资源下的权限类型已按字典序排列 - 最后执行
collect时,会直接沿用排序后的顺序生成数组
方法二:使用APOC函数直接排序数组
如果你的Neo4j环境已安装并启用APOC扩展库,可以直接用apoc.coll.sort函数对聚合后的数组排序:
MATCH (r:Class {Name: 'A'})-[perm]->(res:source) RETURN res.Name AS resource, apoc.coll.sort(collect(type(perm))) AS permission ORDER BY resource
内容的提问来源于stack exchange,提问作者VATSAL JAIN
相关产品推荐
相关产品推荐

