我对 javascript 还很陌生,我正在努力创建一个仪表板。我想获得每周的订单数量,我已经能够做到了。现在,我得到了与一年中的第几周相对应的数字,但是,我想获取与该周相对应的日期(星期一)。我已将以下内容包括在内。我将不胜感激任何有关如何执行此操作的帮助或指导。谢谢!
const weeklyOrders = await Order.aggregate([
{
$group: {
_id: { $dateToString: { format: '%U', date: '$createdAt' } },
orders: { $sum: 1 },
},
},
{ $sort: { _id: 1 } },
]);
编辑:
const weeklyOrders = await Order.aggregate([
{
$group: {
_id:{ $dateFromParts: {
isoWeekYear: {$year: '$createdAt' },
isoWeek: { $isoWeek: '$createdAt' },
isoDayOfWeek: 1
},
},
orders: { $sum: 1 },
},
},
{ $sort: { _id: 1 } },
]);
有效,但日期是 ISO 日期格式。我尝试在下面的代码中修复此问题,但没有成功。
const weeklyOrders = await Order.aggregate([
{
$group: {
_id:{ date: {
$dateToString: { format: '%m-%d-%Y' },
},
},
orders: { $sum: 1 },
},
},
{ $sort: { _id: 1 } },
{
$addFields:{
date: {
$dateFromParts: {
isoWeekYear: {$year: '$createdAt' },
isoWeek: { $isoWeek: '$createdAt' },
isoDayOfWeek: 1
}
}
}
},
]);
您可以执行以下操作:
$year
和 $isoWeek
获取特定日期的年份和周数$dateFromParts
和 "isoDayOfWeek": 1
转换回您想要的星期一db.collection.aggregate([
{
"$addFields": {
"monday": {
$dateFromParts: {
"isoWeekYear": {
$year: "$createdAt"
},
"isoWeek": {
$isoWeek: "$createdAt"
},
"isoDayOfWeek": 1
}
}
}
}
])
这里是Mongo游乐场供您参考。