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



我正在使用猫鼬Js

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. $match - 筛选所有过去的日期
  2. $group - 按数据和产品分组,并$sum每个产品的数量
  3. $sort - 推送到排序数组
  4. $group - 按日期对产品进行分组
  5. $addFields - 将_id.date映射为_id

管道

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"}}
    ]
)

最新更新