获取日期范围内给定时间范围内的Mongodb文档
我想找出在给定日期范围的特定时间段之间存在的文档 我只有一个字段“date”,它存储为日期对象 例如- 查找2018年1月10日至2018年1月30日期间上午10:00至下午23:30的所有文件获取日期范围内给定时间范围内的Mongodb文档,mongodb,Mongodb,我想找出在给定日期范围的特定时间段之间存在的文档 我只有一个字段“date”,它存储为日期对象 例如- 查找2018年1月10日至2018年1月30日期间上午10:00至下午23:30的所有文件 (另外,我目前使用的是3.4版)您可以添加临时字段,将日期的分钟部分表示为60*+,例如上午10点为600,然后应用过滤条件: db.col.aggregate([ { $addFields: { minutes: { $a
(另外,我目前使用的是3.4版)您可以添加临时字段,将日期的分钟部分表示为60*+,例如上午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以ISO格式(mongo支持的格式)存储日期 您可以使用以下命令查找文档:-
model.find({
date:{
$gte:ISODate("2018-01-10T10:00:00.000Z"),
$lte:ISODate("2018-01-30T23:30:00.000Z")
}
})
其中model是集合的名称,date是集合的属性
ISO格式的文件保存日期
您可以使用以下代码执行此操作
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"}
}}
])
这将提供1月10日至1月30日期间所有记录的数据。。。如果要求为每个日期获取时间范围在10到23之间的记录,则将为2018年1月10日到2018年1月30日的日期查找时间范围在上午10:00到下午23:30之间的所有文件。请先试试,谢谢。很好用!!