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 } } // 可选:移除临时添加的权重字段 ])
代码说明
- $addFields阶段:给每个文档新增
sortPriority字段,通过嵌套的$cond条件判断分配权重:- 如果文档是指定的登录用户(_id匹配且status为Active),权重设为1;
- 如果是status为Pending的用户,权重设为2;
- 剩余的Active用户权重设为3。
- $sort阶段:按
sortPriority字段升序排列,权重越小排名越靠前。 - $project阶段:可选步骤,用来移除临时添加的
sortPriority字段,返回原始文档结构。
执行结果
针对你提供的用户数据,执行上述查询后,排序结果会是:
- 指定的登录用户(_id: 653222c20489664953bbaf1a)
- 两个status为Pending的用户
- 剩下的两个Active用户
内容的提问来源于stack exchange,提问作者Neha
相关产品推荐
相关产品推荐

