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

如何在MongoDB中计算嵌套数组对象字段值的差值

MongoDB计算嵌套数组首尾元素字段值差值

问题场景

你的示例数据如下:

{
  "Active": [
    { "min": 1, "energy": 24 },
    { "min": 2, "energy": 34 },
    { "min": 3, "energy": 65 }
  ]
}

需要计算数组中最后一个元素与第一个元素的energy字段差值(65-24=41)。

你之前查询的问题

  1. 字段名大小写不匹配:MongoDB字段名区分大小写,示例数据里是Active,但你的查询用的是小写active,会导致无法匹配字段。
  2. 数组索引错误:查询1中$active.3.energy是错误的,数组索引从0开始,第三个元素的索引是2,不是3。
  3. 数组过滤器用法错误:查询2里的$[n]需要配合arrayFilters参数指定过滤条件,且这种方式无法直接获取数组最后一个元素。

正确解法

使用$arrayElemAt操作符直接获取数组的第一个(索引0)和最后一个(索引-1)元素的energy值,再用$subtract计算差值:

db.collection.aggregate([
  {
    $project: {
      Difference: {
        $subtract: [
          { $arrayElemAt: ["$Active.energy", -1] },
          { $arrayElemAt: ["$Active.energy", 0] }
        ]
      }
    }
  }
])

解释

  • $Active.energy会将数组中所有元素的energy提取为一个新数组:[24, 34, 65]
  • $arrayElemAt: ["$Active.energy", -1]获取这个新数组的最后一个元素65
  • $arrayElemAt: ["$Active.energy", 0]获取第一个元素24
  • $subtract计算两者的差值,得到41

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 15:34:57