Mongodb - 在一小时内按日期/时间获取不同的值
Posted
技术标签:
【中文标题】Mongodb - 在一小时内按日期/时间获取不同的值【英文标题】:Mongodb - get distinct values by date/time within the hour 【发布时间】:2021-11-18 00:48:04 【问题描述】:如果我想要求一个独特的价值观,我可以这样做:
db.getCollection('cars').distinct('deparutre_date')
结果:
2021-05-03 15:59:15.530Z
2021-05-03 15:59:24.534Z
2021-05-03 15:59:33.537Z
2021-05-03 15:59:38.537Z
2021-05-03 15:59:40.536Z
2021-05-03 14:28:41.530Z
但是,我希望按小时获得不同的值,所以上面应该显示如下内容:
2021-05-03 15:00:00.000Z
2021-05-03 14:00:00.000Z
我怎样才能做到这一点?
【问题讨论】:
【参考方案1】:查询
分组方式 日期的年份 (1-12) 一年中的某天(1-366) 一天中的小时(0-23) 只保留 1 个日期(无论如何,所有日期都将具有相同的年/月/日/小时) 项目使用我们已有的字段恢复日期, 我们曾经分组的那些*所有这些运算符还有可选的timezone: <tzExpression>
Test code here
db.collection.aggregate([
"$group":
"_id":
"year":
"$year": "$date"
,
"day-of-year":
"$dayOfYear": "$date"
,
"hour":
"$hour": "$date"
,
"date":
"$first": "$date"
,
"$project":
"_id": 0,
"date":
"$dateFromParts":
"year": "$_id.year",
"day": "$_id.day-of-year",
"hour": "$_id.hour"
])
查询2 (较短的版本 >= MongoDB v5,正如 Wernfried Domschei 在评论中所建议的那样)
Test code here
db.collection.aggregate([
"$set":
truncatedOrderDate:
$dateTrunc:
date: "$date",
unit: "hour",
timezone: "America/Los_Angeles"
,
"$group":
"_id": "$truncatedOrderDate",
])
【讨论】:
如果您运行 MongoDB 5.0 或更高版本,您可以使用更短的_id: $dateTrunc: date: "$date", unit: "hour"
@ Wernfried Domschei 您介意分享一个答案,您将如何使用 dateTrunc 进行操作。我对此有过一些挣扎。谢谢!
我添加了一个$dateTrunc
解决方案,但我认为它们都做同样的事情,如果你有一个不起作用的例子,如果你能发布数据
上述组相同的年+月+日+小时,如果你只想要按小时,忽略年/月/日,它更简单,从你的样本数据我假设你想要年+month+day+hour 还有。以上是关于Mongodb - 在一小时内按日期/时间获取不同的值的主要内容,如果未能解决你的问题,请参考以下文章