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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:30:50