mongodb - Mongo:如何按 $week 分组,但返回每周的开始日期和结束日期?
问题描述
我按 $week 使用 $group。它返回一年中的#week,但我想要每周的开始日期,结束日期而不是
样本:
当前结果:
[{
"_id" : 20,
"averageValue" : null
},
{
"_id" : 21,
"averageValue" : 28.1875
}]
预计:
[{
"_id" : [{ start: "2021-01-01", "end": "2021-01-07" }],
"averageValue" : null
},
{
"_id" : [{ start: "2021-01-08", "end": "2021-01-14" }],
"averageValue" : 28.1875
}]
解决方案
尽管它是可行的,但会使代码的可读性降低且更复杂。
我将重写$group
阶段以包含year
并weeks
添加$project
阶段以根据要求格式化数据。
db.collection.aggregate([
{
"$group": {
"_id": {
"week": {
"$week": {"$subtract": ["$at", 25200000]} // <-- Changes timezone to -07:00
},
"year": {
"$year": {"$subtract": ["$at", 25200000]} // <-- Changes timezone to -07:00
},
},
// <-- Add keys to be added in group along with its logics
"averageValue": {
"$avg": "$readings.level_1"
}
},
},
{
"$project": {
"_id": {
"startDate": {
"$dateToString": {
"date": {
"$dateFromParts": {
"isoWeekYear": "$_id.year",
"isoWeek": "$_id.week"
}
},
"format": "%Y-%m-%d",
},
},
"endDate": {
"$dateToString": {
"date": {
"$add": [
{
"$dateFromParts": {
"isoWeekYear": "$_id.year",
"isoWeek": "$_id.week"
}
},
518400000,
],
},
"format": "%Y-%m-%d",
},
},
},
// <-- Add remaining keys to be projected
"averageValue": 1,
},
},
])
让我知道您是否需要解释使用的每个阶段和操作员以及我使用它的原因。
推荐阅读
- c# - C# 中 Selenium Web 驱动程序项目中的调试问题
- c# - 使用 StringContent 访问 HttpResponseMessge 中的 JSON 对象
- amazon-web-services - 如何获取 AWS Lambda 中调用的原始 URL?
- amazon-web-services - 如何将 CodeDeploy 重新连接到 GitHub
- pdf - 将附件添加到 PDF 中的 mailto 链接
- python - 支持向量回归:TypeError:必须是实数,而不是 str
- tensorflow - Andrew Ng 的 Coursera 作业 - 训练完整的触发词检测模型
- r - 带有替换的样本,但限制了每个成员的最大绘制频率
- python-3.x - 保存具有许多零的矩阵时,CSV Writer 省略了许多项目
- java - 将老式 if 使用转换为 Optional.ifPresent() 时出现问题