我需要找到昨天7AM到今天7AM插入的数据。我如何建立查询来实现这一目标。我能够获取昨天的数据,但无法添加时间过滤器。有人可以帮我吗?
db.company.find({
"createdAt" : {
$lt: new Date(),
$gte: new Date(new Date().setDate(new Date().getDate()-1))
}
})
答案 0 :(得分:1)
您可以使用moment
库
db.company.find({
"createdAt" : {
$lt: moment("07:00:00", "hh:mm:ss").toDate(),
$gte: moment("07:00:00", "hh:mm:ss").subtract(1, "days").toDate()
}
})
答案 1 :(得分:1)
我还将推荐Moment.js库,我的风格是:
db.company.find({
"createdAt" : {
$lt: moment().startOf('day').add(7, "hours").toDate(),
$gte: moment().startOf('day').add(7, "hours").subtract(1, "day").toDate()
}
})
您也可以在本地执行此操作,但是您必须输入更多内容:
db.company.find({
"createdAt": {
$lt:
{
$dateFromParts: {
'year': { year: new Date() },
'month': { month: new Date() },
'day': { $dayOfMonth: new Date() },
'hour': "7"
}
},
$gte:
{
$add: [
$dateFromParts: {
'year': { year: new Date() },
'month': { month: new Date() },
'day': { $dayOfMonth: new Date() },
'hour': "7"
},
-1000 * 60 * 60 * 24
]
}
}
})
答案 2 :(得分:1)
我需要找到昨天7AM到今天7AM插入的数据。 我该如何构建查询来实现这一目标。
我有一些类似的文件,其中两个在昨天的7AM和今天的7AM(12月19日)之内。
{ dt: ISODate("2019-12-18T12:00:00.000Z") },
{ dt: ISODate("2019-12-17T05:00:00.000Z") },
{ dt: ISODate("2019-12-19T02:00:00.000Z") },
{ dt: ISODate("2019-12-19T14:00:00.000Z") }
查询返回两个匹配的文档:
var yesterday_7am = ISODate("2019-12-18T07:00:00.000Z")
var today_7am = ISODate("2019-12-19T07:00:00.000Z")
db.test.find( { dt: { $gte: yesterday_7am, $lte: today_7am } } )
var this_7am = { $dateFromParts: {
year: { $year: new Date() },
month: { $month: new Date() },
day: { $dayOfMonth: new Date() },
hour: 7
}
}
var last_7am = { $subtract: [ this_7am, 24*60*60*1000 ] }
db.test.find( { $expr: { $and: [ { $gte: [ "$dt", last_7am ] }, { $lte: [ "$dt", this_7am ] } ] } } )