如何计算当前一周的每日订单?



我在mongodb上保存了这样的订单:

_id: 5feb0b6cc0ea5745f8d931e3
...
totalPrice: 2935.02
createdAt:2020-12-25T10:56:44.798+00:00

如果今天是25/01/2021,我需要计算这周的每一天有多少订单。

的例子:

25/01/2021: 5 (orders)
26/01/2021: 21 (orders)
27/01/2021: 24 (orders)
...
31/01/2021: 22 (orders)

谢谢你:)

如果我理解正确的话,您想要这样做:给定一年中的一周,按天分组获取该周的所有结果。

则需要执行聚合查询:

  1. 使用$set$week获取每个文档的星期。
  2. 使用$match查找一年中所需的星期。
  3. 再次使用$set,以获得日期作为字符串,不包括时间值,并仅使用:年-月-日选择。
  4. 使用$sum按日期分组以获得总数。
  5. 可选地包括输出字段的名称。

下面是基于当前日期查找当前星期的代码:

let today = new Date();
let oneJan =  new Date(today.getFullYear(), 0, 1); 
let numberOfDays =  Math.floor((today - oneJan) / (24 * 60 * 60 * 1000)); 
let result = Math.ceil(( today.getDay() + 1 + numberOfDays) / 7);   
db.collection.aggregate([
{ "$set": { "date": { "$week": "$createdAt" }}},
{ "$match": { "date": your_desired_week }},
{ "$set": { "date": {
"$dateToString": { "format": "%Y-%m-%d", "date": "$createdAt" }}}},
{ "$group": { "_id": "$date", "orders": { "$sum": 1 }}},
{ "$project": { "date": "$_id", "orders": 1, "_id": 0 }}
])

例子

应该是这个:

{
$group: {
_id: {
$dateFromParts: {
'isoWeekYear': { $isoWeekYear: "$createdAt" }, 'isoWeek': { $isoWeek: "$createdAt" }
}
}, 
orders: { $sum: 1 }
}
}

试试这个查询。

var today = new Date(); 
var first = today.getDate() - today.getDay();
var firstDayWeek = new Date(today.setDate(first));
var lastDayWeek = new Date(today.setDate(first + 6));
db.getCollection('Collection').aggregate([{
$project: {
date: {
$dateFromString: {
dateString: '$createdAt'
}
}
}}, {
$match: {
"date": {
$lt: lastDayWeek,
$gt: firstDayWeek
}
},
{$group:{_id:"$createdAt",count:{$sum:1}}}}])

最新更新