如何在MongoDB中聚合文档数组

盖兰多 OCs

我有以下架构:

var orderSchema = new mongoose.Schema({
    deleted: Boolean,
    clientName: String,
    clientPhone: String,
    products: [{
        name: String,
        quantity: Number,
        price: Number
    }],
    observations: String,
    date: {
        type: Date,
        default: Date.now
    },
    seller: String,
    orderNumber: Number,
    total: Number
});

我想进行一个汇总查询,对每个产品求和并添加quantity*pricetotal,然后返回总数。但是,我只知道如果我有多个产品,每个产品作为一个文档,然后对所有文档求和而不是这个。

whoami - fakeFaceTrueSoul

你可以用$reduce做到这一点

db.collection.aggregate([{
    $addFields: {
        "total": {
            $reduce: {
                input: "$products",
                initialValue: '$total',
                in: { $add: [{ $multiply: ["$$this.quantity", "$$this.price"] }, '$$value'] }
            }
        }
    }
}])

测试: MongoDB-Playground

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在mongoDB中的大型数组上聚合?

如何在Mongo聚合中合并文档中的数组字段

如何在MongoDB聚合管道中隐藏单个子文档?

如何在MongoDB投影聚合中访问特定的数组项?

如何在MongoDB中获取(或聚合)数组的不同键

如何在MongoDB聚合中展开多个数组

如何在MongoDB查询中过滤和映射文档数组?

如何在MongoDB聚合方法中合并整数数组?

如何在mongodb中使用$ in聚合文档?

MongoDB聚合数组文档

如何在mongodb中查找文档并使用聚合查找属性?

如何在mongodb中查找数组大小大于1的文档

如何在Mongodb中聚合不同的数组字段

如何在MongoDB中查找大于文档大小的数组

如何使用聚合在MongoDB中的文档根目录中输出数组的对象?

如何在mongodb聚合中的数组内部查找?

如何在MongoDB中检索子文档数组

如何在MongoDB中查找并插入子文档数组列表?

在聚合mongodb中按文档数组排序

如何在 mongodb 聚合管道中限制 $group 中的文档?

如何使用mongodb聚合转换嵌套数组中的文档

如何聚合来自 MongoDB 中不同文档的数组值?

如何在 mongoose/mongodb 中对子文档数组进行排序?

如何将文档中的数组元素与任何其他数组进行 $match - mongodb 聚合

ElasticSearch - 如何在聚合中“折叠”文档

MongoDB 聚合 - 如何检查文档数组中是否存在特定字段值

如何在mongodb聚合中复制文档常量时间?

如何在 mongoDB 文档中查找和打印对象数组

如何使用 mongodb 聚合将文档的值转换为数组?