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

如何在Azure Cosmos MongoDB中对Decimal128类型字段聚合求和?

Azure Cosmos MongoDB中Decimal128字段聚合求和解决方案

Azure Cosmos DB的MongoDB API对Decimal128类型字段直接使用$sum聚合会出现返回0或“期望整数”的错误,这是因为$sum默认对Decimal128类型的支持存在局限,需要通过类型转换或高精度累加方式处理。

方法1:转换为Double类型求和(适合对精度要求不高的场景)

通过$toDouble将Decimal128字段转为Double类型后再求和,示例语句:

data.aggregate([
  {
    $group: {
      _id: null,
      totalAmount: { 
        $sum: { $toDouble: "$amount" }
      }
    }
  }
])

也可以先通过投影转换类型,再执行聚合,逻辑更直观:

data.aggregate([
  {
    $project: {
      amountDouble: { $toDouble: "$amount" }
    }
  },
  {
    $group: {
      _id: null,
      totalAmount: { $sum: "$amountDouble" }
    }
  }
])

方法2:保留Decimal128高精度求和(适合金融等高精度场景)

如果需要避免Double类型的精度损失,可以先收集所有字段到数组,再用$reduce结合$add做原生Decimal128累加:

data.aggregate([
  {
    $group: {
      _id: null,
      amountList: { $push: "$amount" }
    }
  },
  {
    $project: {
      totalAmount: {
        $reduce: {
          input: "$amountList",
          initialValue: { $toDecimal: "0" },
          in: { $add: ["$$value", "$$this"] }
        }
      }
    }
  }
])

这种方式的求和结果依然是Decimal128类型,完全保留精度。

内容的提问来源于stack exchange,提问作者justin.m.chase

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:06:28