MongoDB聚合查询如何按指定level数组顺序实现自定义排序
MongoDB自定义排序修改方案
原查询直接对level字段按字典序排序,因为字符串Low的ASCII码小于Medium,才会出现不符合预期的排序结果。可通过添加自定义权重字段的方式调整排序逻辑,修改后的聚合语句如下:
data = Coll.objects().aggregate( {"$match": {"insert_time": {"$lt": to_datetime}}}, {"$project": {"status": 1, "level": 1}}, # 新增计算排序权重的阶段 {"$addFields": { "sort_weight": {"$indexOfArray": [["High", "Medium", "Low"], "$level"]} }}, # 替换原排序逻辑,按权重升序排列 {"$sort": {"sort_weight": 1}}, # 可选:移除不需要返回的权重字段 {"$project": {"sort_weight": 0}} )
逻辑说明
- 用
$indexOfArray运算符获取每个level值在指定顺序数组中的下标作为权重:High对应权重0、Medium对应1、Low对应2 - 按权重升序排序后,输出结果就会完全匹配预期的顺序
- 如果存在不在自定义数组中的
level值,默认会排在最前面,如有特殊需求可通过$cond运算符调整权重规则
内容的提问来源于stack exchange,提问作者Soumee Giri
相关产品推荐
相关产品推荐

