MongoDB如何拆分文档数组元素为多行并计算商品小计
解决方案
你可以通过MongoDB的聚合管道实现需求,核心用$unwind操作符拆分数组,再做字段计算即可,具体步骤如下:
- 第一步:用
$unwind展开products数组,数组内的每个元素都会被拆成单独的文档行,解决你提到的$project无法拆分数组为独立行的问题 - 第二步:用
$addFields新增subtotal小计字段,注意你的price字段是字符串类型,需要先转为数值类型再做乘法计算 - 第三步:用
$project调整输出字段顺序,匹配你需要的格式
完整聚合查询代码
db.collection.aggregate([ // 拆分products数组为独立行 { $unwind: "$products" }, // 计算小计,先把字符串格式的price转成整数再和数量相乘 { $addFields: { subtotal: { $multiply: [ "$products.quantity", { $toInt: "$products.price" } ] } } }, // 格式化输出字段 { $project: { _id: 0, BranchName: "$branchName", name: "$products.name", quantity: "$products.quantity", price: "$products.price", subtotal: 1 } } ])
执行上述聚合后输出的每条文档就对应一个商品行,你可以直接对输出的字段做后续的求和、分组统计等算术运算。如果需要导出为CSV格式,直接将聚合结果传入mongoexport工具即可。
内容的提问来源于stack exchange,提问作者Mahmoud Hoter
相关产品推荐
相关产品推荐

