如何在MongoDB中计算嵌套数组对象字段值的差值
MongoDB计算嵌套数组首尾元素字段值差值
问题场景
你的示例数据如下:
{ "Active": [ { "min": 1, "energy": 24 }, { "min": 2, "energy": 34 }, { "min": 3, "energy": 65 } ] }
需要计算数组中最后一个元素与第一个元素的energy字段差值(65-24=41)。
你之前查询的问题
- 字段名大小写不匹配:MongoDB字段名区分大小写,示例数据里是
Active,但你的查询用的是小写active,会导致无法匹配字段。 - 数组索引错误:查询1中
$active.3.energy是错误的,数组索引从0开始,第三个元素的索引是2,不是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
相关产品推荐
相关产品推荐

