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

MongoDB查询实现自定义排序:登录用户置顶,Pending次之

MongoDB实现指定用户优先、Pending用户次之的自定义排序

要满足你提出的排序规则——指定登录用户(_id为ObjectId("653222c20489664953bbaf1a")且status为Active)排最前,接着是status为Pending的用户,最后是其他Active用户——可以通过MongoDB的聚合管道,给不同类别的文档分配排序权重,再按权重升序排列来实现。

具体聚合查询代码

db.users.aggregate([
  {
    $addFields: {
      sortPriority: {
        $cond: [
          {
            $and: [
              { $eq: ["$_id", ObjectId("653222c20489664953bbaf1a")] },
              { $eq: ["$status", "Active"] }
            ]
          },
          1, // 目标用户权重最高,排第一梯队
          {
            $cond: [
              { $eq: ["$status", "Pending"] },
              2, // Pending用户排第二梯队
              3  // 其他Active用户排第三梯队
            ]
          }
        ]
      }
    }
  },
  { $sort: { sortPriority: 1 } },
  { $project: { sortPriority: 0 } } // 可选:移除临时添加的权重字段
])

代码说明

  1. $addFields阶段:给每个文档新增sortPriority字段,通过嵌套的$cond条件判断分配权重:
    • 如果文档是指定的登录用户(_id匹配且status为Active),权重设为1;
    • 如果是status为Pending的用户,权重设为2;
    • 剩余的Active用户权重设为3。
  2. $sort阶段:按sortPriority字段升序排列,权重越小排名越靠前。
  3. $project阶段:可选步骤,用来移除临时添加的sortPriority字段,返回原始文档结构。

执行结果

针对你提供的用户数据,执行上述查询后,排序结果会是:

  1. 指定的登录用户(_id: 653222c20489664953bbaf1a)
  2. 两个status为Pending的用户
  3. 剩下的两个Active用户

内容的提问来源于stack exchange,提问作者Neha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:02:59