Node.js查询MongoDB计算购物车总价时price转数字出现NaN如何解决
问题根因
你遇到NaN的核心原因是 parseInt('$product.price') 是在Node.js运行环境中执行的,而非MongoDB的聚合管道内执行。此时你传给parseInt的是字符串字面量'$product.price',而非MongoDB文档中product.price的实际值,转换后直接得到NaN,代入聚合计算后总金额自然为NaN。
解决方法
你需要使用MongoDB原生的类型转换操作符在聚合管道内完成类型转换:
- 若价格为整数,使用
$toInt操作符 - 若价格包含小数,推荐使用
$toDouble操作符
修改后的$group阶段代码
{ $group: { _id: null, total: { $sum: { $multiply: [ '$quantity', { $toDouble: '$product.price' } ] } } } }
兼容异常场景的优化写法
如果存在部分商品缺失price字段、或price字段包含非数字字符的情况,可以使用$convert操作符做兜底容错,避免整体计算失败:
{ $group: { _id: null, total: { $sum: { $multiply: [ '$quantity', { $convert: { input: '$product.price', to: 'double', onError: 0, onNull: 0 } } ] } } } }
内容的提问来源于stack exchange,提问作者Hamdan
相关产品推荐
相关产品推荐

