Neo4j 如何通过Cypher查询按节点属性特定值对结果排序
问题解答:Cypher按指定属性值优先级排序
可以直接用ORDER BY实现该需求,不需要额外方案。
Cypher的ORDER BY支持对自定义表达式的返回结果做排序,你可以通过给目标属性值设置更高排序权重的方式,实现指定值优先的排序规则。
假设你要查询的是标签为Person的节点,节点包含name(对应结果表的Person列)和city两个属性,适配你场景的完整查询语句如下:
MATCH (p:Person) RETURN p.name AS Person, p.city AS City ORDER BY // 伦敦优先排在最前 p.city = 'London' DESC, // 剩余城市按纽约>芝加哥的顺序排序,匹配你给出的预期结果 CASE p.city WHEN 'New York' THEN 1 WHEN 'Chicago' THEN 2 END ASC, // 同城市下按人名升序排列,可按需调整排序规则 p.name ASC
规则说明
- 布尔值判断表达式
p.city = 'London'匹配成功时返回true,匹配失败返回false,Cypher排序逻辑中true的权重高于false,加DESC降序后所有伦敦的记录会排在最前面 - 如果有多个自定义排序优先级,可以用
CASE表达式给不同属性值分配对应权重数值,排序逻辑更清晰易维护 - 你可以按需调整次级排序规则,比如同城市下按人名降序排,只需要把最后一行改成
p.name DESC即可
内容的提问来源于stack exchange,提问作者Natwar
相关产品推荐
相关产品推荐

