【发布时间】:2018-08-01 17:14:39
【问题描述】:
我想找出给定日期范围内某个时间段之间存在的文档。
我只有一个字段“日期”,它存储为日期对象。
例如-
查找时间为 2018 年 1 月 10 日至 2018 年 1 月 30 日的上午 10:00 至下午 23:30 的所有文档
(我目前使用的是 3.4 版)
【问题讨论】:
标签: mongodb
我想找出给定日期范围内某个时间段之间存在的文档。
我只有一个字段“日期”,它存储为日期对象。
例如-
查找时间为 2018 年 1 月 10 日至 2018 年 1 月 30 日的上午 10:00 至下午 23:30 的所有文档
(我目前使用的是 3.4 版)
【问题讨论】:
标签: mongodb
您可以添加临时字段,将您的日期的分钟部分表示为 60*$hour + $minute,例如上午 10 点将是 600,然后应用您的过滤条件:
db.col.aggregate([
{
$addFields: {
minutes: {
$add: [ { $minute: "$date" }, { $multiply: [ { $hour: "$date" }, 60 ] }]
}
}
},
{
$match: {
$and: [
{ "date": { $gte: ISODate("2018-01-10T10:00:00.000Z") } },
{ "date" : { $lte: ISODate("2018-01-30T23:30:00.000Z") } },
{ "minutes": { $gte: 60*10 } },
{ "minutes": { $lte: 23*60+30 } }
]
}
},
{
$project: { minutes: 0 }
}
])
【讨论】:
你可以用下面的代码做到这一点。
db.getCollection('collection name').aggregate([
{$project: {
"yearMonthDayUTC": { $dateToString: { format: "%Y-%m-%d", date: "$date" }},
"timewithOffset": { $dateToString: { format: "%H:%M:%S", date: "$date", timezone: "Your time zone" }}
}
},
{$match: {
"yearMonthDayUTC": {$gte: "2018-01-10", $lt: "2018-01-30"},
"timewithOffset": {$gte: "10:00:00", $lt: "23:30:00"}
}}
])
【讨论】: