mongodb - 如何根据时间获取记录?
问题描述
我是 MongoDb 的新手,希望对这个查询有所帮助。我编写了以下聚合管道。我写了一个查询,它返回最后 24 小时的记录,之后我得到 (00:01) 小时到 (05:00) 小时的记录。有了这个,我怎样才能在 (20:00) 小时和 (23:59) 小时之间获取记录。任何人,请建议我。
db.collection.aggregate([
{$match: {createDate: {$gte: new Date(new Date(ISODate().getTime() - 1000*60*60*24))}}},
{
$project: {
hour: { $hour: "$createDate" },
minutes: { $minute: "$createDate" },
}
},
{
$match: {
$and: [{"hour": { "$gte" : 0}},{"minutes":{ "$gte" : 1}}],
$and: [{"hour": { "$lte" : 5}}],
}
},
])
输出:
{
"hour" : 0
"minutes" : 1
}
/* 2 */
{
"hour" : 4
"minutes" : 2
}
预期输出:
{
"hour" : 0
"minutes" : 1
}
/* 2 */
{
"hour" : 4
"minutes" : 2
},
{
"hour" : 4
"minutes" : 59
}
和
{
"hour" : 20
"minutes" : 1
}
/* 2 */
{
"hour" : 22
"minutes" : 2
},
{
"hour" : 23
"minutes" : 59
}
解决方案
扩展 JohnnyHK 的评论,这$match
应该适用于 20:00 - 23:59。
// 20:00 - 23:59
{
$match: {
hour: { $gte: 20, $lt: 24 }
}
}
如果您想同时取回两者,您可以使用$or
包含所有条件。
{
$match: {
$or: [
< 0-5 hour criteria >,
< 20-24 hour criteria >
]
}
}
0-5 小时的变化
// 00:00 - 04:59
{
$match: {
hour: { $gte: 0, $lt: 5 }
}
}
// 00:01 - 04:59
{
$match: {
$or: [
{ hour: 0, minutes: { $gt: 0 }}, // 00:01 - 00:59
{ hour: { $gt: 0, $lt: 5 }} // 01:00 - 04:59
]
}
}
// 00:01 - 05:00
{
$match: {
$or: [
{ hour: 0, minutes: { $gt: 0}}, // 00:01 - 00:59
{ hour: { $gt: 0, $lt: 5 }}, // 01:00 - 04:59
{ hour: 5, minutes: 0} // 05:00
]
}
}
// 00:00 - 05:00
{
$match: {
$or: [
{ hour: { $gte: 0, $lt: 5 }}, // 00:00 - 04:59
{ hour: 5, minutes: 0 } // 05:00
]
}
}
把它们放在一起
// 00:01 - 04:59 AND 20:00 - 23:59
{
$match: {
$or: [
{ hour: 0, minutes: { $gt: 0}}, // 00:01 - 00:59
{ hour: { $gt: 0, $lt: 5 }}, // 01:00 - 04:59
{ hour: 5, minutes: 0}, // 05:00
{ hour: { $gte: 20, $lt: 24 }} // 20:00 - 23:59
]
}
}
推荐阅读
- swift - 如何使用 Combine + Swift 复制 PromiseKit 风格的链式异步流
- java - JUnit application.properties 总是返回 null
- android-activity - 如何从片段 recyclerView 更新活动视图
- sql - 按表达式排序的列连接。这是错的吗?
- javascript - 如何实现嵌套可折叠?
- php - 如何从数据库中获取数据作为嵌套 JSON 数组?
- azure - YAML - 使用 Yaml 配置文件部署期间的验证错误
- python - 如果用户文件夹在目录中有空格怎么办?
- java - ThreadLocalRandom.current().nextLong() 的最大长度
- r - 如何从具有 NA 的数据框中创建参差不齐的数据框(参差不齐的数组样式)