mongodb - Mongodb 聚合 $group 并计算日期范围
问题描述
我有这样的文件:
{
"_id" : ObjectId("5cc80389c723e046f504b5a9"),
"adddress" : "string",
"checkIn" : "2019-04-30T08:12:57.909Z"
},
{
"_id" : ObjectId("5cc995f5a6f3eb7c483b019f"),
"adddress" : "string",
"checkIn" : "2019-05-01T12:49:57.561Z"
}
我试过这样的聚合:
var start = new Date("2019-04-30T08:12:57.909Z");
var end = new Date("2019-05-01T12:49:57.561Z");
var pipeline = [
{
$match: {
checkIn: {
$gte: start,
$lte: end
}
}
},
{
$group: {
_id: {
year: {
$year: "$checkIn"
},
month: {
$month: "$checkIn"
},
day: {
$dayOfYear: "$checkIn"
}
},
count: {
$sum: 1
}
}
}];
db.collections.aggregate(管道).toArray()
是否可以按签入日期计算它们并获得如下结果:
"_id": [{
"checkIn": "2019-03-15T00:00:00Z",
"count": 4
}, {
"checkIn": "2019-04-30T00:00:00Z",
"count": 1
}, {
"checkIn": "2019-05-10T00:00:00Z",
"count": 1
}],
解决方案
The result is shown the total number of the day.
{$project: {
checkIn: { $dateToString: { format: '%Y-%m-%d', date: '$checkIn' } }
}},
{$group: {
_id: '$checkIn',
checkIn: {$first: '$checkIn'},
count: {$sum: 1}
}},
{$sort: {checkIn: 1}}
推荐阅读
- git - 如何移动一些已发布的提交,包括合并到分支并稍后将它们合并回来
- c# - Xamarin Forms - iOS - 根据屏幕方向更改初始屏幕
- google-bigquery - bigquery google.api.client 获取表列表 API
- macos - 在异步加载文件时更新 NSWindow 内容
- arrays - 用数组转置数据集
- javascript - 在 ASP.net MVC Web 应用程序中跟踪注销时间
- java - 相机 API - 如何专注于图像中多边形的中心?
- matrix - glmnet 输入错误,输入矩阵的格式不正确
- bash - 错误:-测试: ing: 一元运算符预期
- java - 为什么我创建的目录没有同时出现在图库和 Google 相册中?