Neo4j ORDER BY 自定义排序?
Neo4j ORDER BY custom sorting?
我有一个查询,其中一部分看起来像:
WITH ... person ORDER BY person.name
问题是 person.name 包含全名,即“Albert Einstein”。所以阿尔伯特·爱因斯坦出现在“彼得·阿尔伯特”之前。
有没有办法按姓氏排序? IE。某种自定义比较器?当然,考虑到像麦当娜这样的人的名字:)。
我知道我可以进入数据并拆分所有名称,但我想尽可能避免这样做。
您可以即时排序,但如评论中所述,与在模型中拆分数据相比,这会很昂贵。
以电影数据集为例,这是一种根据姓氏对其进行排序的方法。
将由 space 分隔的名称拆分为一个列表,然后 [-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" │
我有一个查询,其中一部分看起来像:
WITH ... person ORDER BY person.name
问题是 person.name 包含全名,即“Albert Einstein”。所以阿尔伯特·爱因斯坦出现在“彼得·阿尔伯特”之前。
有没有办法按姓氏排序? IE。某种自定义比较器?当然,考虑到像麦当娜这样的人的名字:)。
我知道我可以进入数据并拆分所有名称,但我想尽可能避免这样做。
您可以即时排序,但如评论中所述,与在模型中拆分数据相比,这会很昂贵。
以电影数据集为例,这是一种根据姓氏对其进行排序的方法。 将由 space 分隔的名称拆分为一个列表,然后 [-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" │