首页 > 解决方案 > Neo4j ORDER BY 自定义排序?

问题描述

我有一个查询,其中一部分看起来像:

WITH ... person ORDER BY person.name

问题是 person.name 包含全名,即“Albert Einstein”。所以阿尔伯特·爱因斯坦出现在“彼得·阿尔伯特”之前。

有没有办法按人的姓氏进行排序?即某种自定义比较器?当然,考虑到像麦当娜这样的名字的人:)。

我知道我可以进入数据并拆分所有名称,但如果可能的话,我想避免这样做。

标签: neo4jcypherspring-data-neo4j

解决方案


您可以即时排序,但如评论中所述,与拆分模型中的数据相比,它会很昂贵。

以电影数据集为例,这是一种根据姓氏对其进行排序的方法。将用空格分隔的名称拆分为一个列表,然后 [-1] 表示按该列表的最后一项排序。

MATCH (n:Person) 
WITH n ORDER by split(n.name, ' ')[-1]
RETURN n.name

result:

 ════════════════════════╕
│"n.name"                │
╞════════════════════════╡
│"Stefan Arndt"          │
├────────────────────────┤
│"Kevin Bacon"           │
├────────────────────────┤
│"Christian Bale"        │
├────────────────────────┤
│"Marshall Bell"         │
├────────────────────────┤
│"Halle Berry"           │

推荐阅读