You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:45:05