mongodb - MongoDB中的数据不按时间顺序排列
问题描述
使用聚合,我每月每天都在获取数据。在这个例子中,我得到的数据是从 2020-05-28 到 2020-06-04。数据没问题,但不是顺序,因为它没有按时间顺序执行,因为它从 1 到 4,然后跳到 28,如下例所示:
{'_id': 1, 'count': 205}
{'_id': 2, 'count': 128}
{'_id': 3, 'count': 142}
{'_id': 4, 'count': 116}
{'_id': 28, 'count': 165}
{'_id': 29, 'count': 203}
{'_id': 30, 'count': 173}
{'_id': 31, 'count': 202}
这是它应该如何工作的:
{'_id': 28, 'count': 165}
{'_id': 29, 'count': 203}
{'_id': 30, 'count': 173}
{'_id': 31, 'count': 202}
{'_id': 1, 'count': 205}
{'_id': 2, 'count': 128}
{'_id': 3, 'count': 142}
{'_id': 4, 'count': 116}
有什么猜测吗?感谢您的帮助。
聚合:
[{$match: {
start_date: {
$gte: ISODate('2020-05-28T10:00:01.000Z'),
$lte: ISODate('2020-06-04T09:59:59.000Z')
}
}}, {$project: {
'day': {
'$dayOfMonth': {
'date': '$start_date',
'timezone': 'America/Mexico_City'
}
}
}}, {$group: {
'_id': '$day',
'count': {
'$sum': 1
}
}}, {$sort: {
'_id': 1
}}]
解决方案
我们可以做这样的事情
db.collection.aggregate([
{
$match: {
start_date: {
$gte: ISODate("2020-05-28T10:00:01.000Z"),
$lte: ISODate("2020-06-04T09:59:59.000Z")
}
}
},
{
$group: {
_id: {
month: {
$month: {
"date": "$start_date",
"timezone": "America/Mexico_City"
}
},
day: {
$dayOfMonth: {
"date": "$start_date",
"timezone": "America/Mexico_City"
}
},
year: {
$year: {
"date": "$start_date",
"timezone": "America/Mexico_City"
}
}
},
"count": {
"$sum": 1
}
}
},
{
$sort: {
"_id.year": 1,
"_id.month": 1,
"_id.day": 1
}
}
])
对于您的方案,它需要按完整日期分组,以便same dates with different month/year
区分。
您可以在此处查看工作示例 https://mongoplayground.net/p/qOoG-3V-S1P
推荐阅读
- xml - 使用 Powershell 进行 XML 解析
- c# - 使用 C# 的非 WPF 或 Win32 应用程序的 UI 自动化
- javascript - javascript中require()函数的问题
- java - 具有多个线程的 Kafka Producer - Java
- kubernetes - 同一命名空间中的两个 Kubernetes 部署无法通信
- aws-sam - API 网关通过 SAM 直接连接到 SNS
- neo4j - EXISTS 带有动态标签的密码查询
- javascript - 我如何粗略地匹配 Javascript 中的两个字符串?
- java - 如何从 JobService 中调用 fusedLocationClient.getLastLocation()?
- python - 比较数据框中特定列行的长度,python