我正在MongoDB中编写一个查询。我有一个订单表,我想得到按日期分组的所有产品的未来/即将到来的订单是我的架构

时间:2018-02-04 06:53:15

标签: node.js mongodb mongoose

我正在使用mongooseJs

var orderSchema = new mongoose.Schema({
    product:String,
    quantity:Number,
    date:{type:Date , default: Date.now},
    delivery_date:String,
    amount:Number,
    total:Number,
    payment_status:{type:Boolean,default:false},
    status:{type:String, default:"Placed"}, 
});

我真正想做的是显示明确的即将到来的订单 即

今天(2月1日): - 产品A - 100个单位

(2月2日): - 产品A - 150个单位,产品B - 200个单位

(2月3日): - 产品A - 20个单位,产品B - 400个单位

(2月4日): - 产品A - 0个单位,产品B - 500个单位,产品C - 5个单位

。 。 。 。 。 。

1 个答案:

答案 0 :(得分:0)

您可以使用聚合管道对文档进行分组

  1. $match - 过滤所有过去的日期
  2. $group - 按数据和产品分组,以及每种产品的$ sum数量
  3. $sort - 推入排序数组
  4. $group - 按日期对产品进行分组
  5. $addFields - 将_id.date映射为_id
  6. 管道

    db.orders.aggregate(
        [
            {$match : {date : {$gte : new Date()}}},
            {$group : {
                _id : {date : "$date", product : "$product"},
                quantity : {$sum : "$quantity"}
                }
            },
            {$sort : {"_id.product" : 1}},
            {$group : {
                _id : {date : "$_id.date"},
                products : {
                    $push : {product : "$_id.product", quantity : "$quantity"}
                    }
                }
            },
            {$addFields : {_id : "$_id.date"}}
        ]
    )