如何在MongoDB中按两个字段的差值大小对记录排序?
解决方案
当然可以在MongoDB中基于两字段的差值进行排序,进而获取差值最大的记录,以下是具体实现方式:
方式1:聚合管道新增差值字段后排序(兼容性好)
先计算currentValue与initialValue的差值并生成临时字段,再按该字段降序排序,最后仅返回第一条记录:
db.collection.aggregate([ // 新增临时字段存储差值 { $addFields: { valueDiff: { $subtract: ["$currentValue", "$initialValue"] } } }, // 按差值降序排列,最大差值的记录排在首位 { $sort: { valueDiff: -1 } }, // 只取第一条记录 { $limit: 1 } ])
方式2:直接在排序阶段内嵌计算(MongoDB 4.2+)
如果你的MongoDB版本是4.2及以上,可省略新增字段的步骤,直接在$sort阶段使用聚合表达式计算差值并排序:
db.collection.aggregate([ { $sort: { $expr: { $subtract: ["$currentValue", "$initialValue"] }, $order: -1 } }, { $limit: 1 } ])
补充说明
- 若需要获取绝对值最大的差值记录(不区分正负),只需将差值计算替换为
{ $abs: { $subtract: ["$currentValue", "$initialValue"] } }后再排序即可。 - 请确保
currentValue和initialValue为数值类型,否则会导致差值计算失败。
内容的提问来源于stack exchange,提问作者kapisolec
相关产品推荐
相关产品推荐

