我想找出在给定日期范围内某个时间段之间存在的文档。
我只有一个字段“ date”存储为Date对象。
例如-
查找时间在2018年1月10日至2018年1月30日之间的所有文件,时间为上午10:00至晚上23:30。
(我目前也正在使用3.4版)
答案 0 :(得分:1)
您可以添加一个临时字段,该字段将日期的分钟部分表示为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 }
}
])
答案 1 :(得分: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"}
}}
])
答案 2 :(得分:-1)
首先,您必须确保您的数据库以ISO格式(mongo支持的格式)存储日期
您可以使用以下命令查找文档:-
model.find({
date:{
$gte:ISODate("2018-01-10T10:00:00.000Z"),
$lte:ISODate("2018-01-30T23:30:00.000Z")
}
})
其中model是集合的名称,date是的属性 ISO格式的文档保存日期。