MongoDB升序排序时如何将null值及缺失对应字段的文档排在末尾
MongoDB 缺失排序字段/null值后置排序方案
你当前的查询已经实现了第一层排序逻辑:将有rank字段的文档排在rank字段缺失/值为null的文档前面,仅需要补充第二层排序规则,对有rank值的文档按字段本身升序排列即可,调整后的完整查询如下:
db.collection.aggregate([ { $addFields: { sortrank: { $cond: { if: { $eq: [ "$rank", null ] }, then: 2, else: 1 } } } }, { "$sort": { "sortrank": 1, "rank": 1 } } ])
调整说明
- 原
$cond判断逻辑可以正常覆盖「rank字段不存在」和「rank字段显式赋值为null」两种场景,不需要修改 - 在
$sort阶段新增rank: 1的升序规则后,所有sortrank为1(即有有效rank值)的文档会先按rank值从小到大排列,之后再排列sortrank为2的无值文档,完全匹配你给出的示例预期
内容的提问来源于stack exchange,提问作者prabhakar srivastava
相关产品推荐
相关产品推荐

