mongodb - MongoDB $group + $project + 每周平均
问题描述
我试图在 Mongo 每周获得一些商店的平均水平,但它不起作用。你能帮我吗?
db.collection.aggregate(
[
{$match:{storeId:{$in:[
ObjectId("e069d1b76557685b9e235v"),ObjectId("e069d1b76557685b9t7j8n"),
ObjectId("e069d1b76557685b9e2fg6"),ObjectId("e069d1b76557685b9p56r2")
]}}},
{$group:{_id:"$storeId", week: { date: new Date("$createdAt") }, totalPoints: {$sum: "$points"}, averagePoints: {$avg: "$points"}} },
{$sort: {totalPoints:-1}}
])
它不起作用。但是,如果我删除了一周的部分时间,代码可以正常工作,但平均值错误
db.collection.aggregate(
[
{$match:{storeId:{$in:[
ObjectId("e069d1b76557685b9e235v"),ObjectId("e069d1b76557685b9t7j8n"),
ObjectId("e069d1b76557685b9e2fg6"),ObjectId("e069d1b76557685b9p56r2")
]}}},
{$group:{_id:"$storeId", totalPoints: {$sum: "$points"}, averagePoints: {$avg: "$points"}} },
{$sort: {totalPoints:-1}}
])
解决方案
对于groupBy
一周,您可以使用$week
mongo 的功能并在$match
操作中添加开始日期。
db.collection.aggregate(
[
{$match:{storeId:{$in:[
ObjectId("e069d1b76557685b9e235v"),ObjectId("e069d1b76557685b9t7j8n"),
ObjectId("e069d1b76557685b9e2fg6"),ObjectId("e069d1b76557685b9p56r2")
]},
timeStamp: {$gt: ISODate(createdAt)},
}},
{$group:{_id:"$storeId", week: { $week: '$timeStamp'}, totalPoints: {$sum: "$points"}, averagePoints: {$avg: "$points"}} },
{$sort: {totalPoints:-1}}
])
推荐阅读
- c++ - Cmake 构建两个项目
- prolog - 在prolog中找到一条循环路径
- javascript - Visual Studio Code - 在保存时编译 Javascript
- python - 我无法在 python 中使用 json.loads() 从文件中加载字典
- python - 如何从下午 6:00 到上午 9:00 之间的 pandas 数据框中删除日期时间索引值?
- kdb - 函数的值,kdb+
- azure - 触发 Azure Devops 中项目中存在的另一个构建
- php - php-fpm:在 kubernetes 中找不到文件
- html - CSS网格和响应式设计的问题
- kotlin - Ktor 暴露的 SELECT 类型不匹配