Mongodb 按今天的日期查找创建的结果
Mongodb find created results by date today
我有这个查询来获取当月的结果。但是我想得到今天的结果。
var start = new Date(2010, 11, 1);
var end = new Date(2010, 11, 30);
db.posts.find({created_on: {$gte: start, $lt: end}});
最好的方法是什么?
您的开始日期对象应将当前日期时间保持在 00:00:00.000
(毫秒精度)并将今天日期的时间设置为 23:59:59.999
:
var start = new Date();
start.setHours(0,0,0,0);
var end = new Date();
end.setHours(23,59,59,999);
然后像往常一样在您的 MongoDB 查询运算符中传递修改后的日期对象:
db.posts.find({created_on: {$gte: start, $lt: end}});
如果您在 dayjs 当前日期对象上使用 dayjs date utility library, this can be done by using the startOf()
and endOf()
方法,将字符串 'day'
作为参数传递:
const start = dayjs().startOf('day'); // set to 12:00 am today
const end = dayjs().endOf('day'); // set to 23:59 pm today
您也可以使用$expr
如下:
db.posts.find({
$expr: {
$eq: [
{ $dateToString: { format: '%Y-%m-%d', date: '$$NOW' } },
{ $dateToString: { format: '%Y-%m-%d', date: '$created_on' } },
],
},
})
解决方案
要查找今天的日期结果或日期之间的数据,请使用以下内容:
NodeJS:
// Date format YYYY-MM-DD
// Suppose you want to look for 1 day data between 2021-12-27 00:00:00 and 2021-12-28 00:00:00
let start = new Date("2021-12-27");
let end = new Date("2021-12-28");
// "created_on" can be any field with a date
db.posts.find({created_on: {$gte: start, $lt: end}});
这也适用于 Mongo Shell:
db.posts.find({created_on: {$gte: new ISODate("2021-12-27T00:00:00.000Z"), $lt: new ISODate("2021-12-28T00:00:00.000Z")}})
另一种方式:
// 27th half day
db.posts.find({created_on: {$gte: new Date("2021-12-27T00:00:00.000Z"), $lt: new Date("2021-12-27T12:00:00.000Z")}})
参考
find
- Select / filter data
$gte
- Greater Than / Equal
$lt
- Lower Than
我有这个查询来获取当月的结果。但是我想得到今天的结果。
var start = new Date(2010, 11, 1);
var end = new Date(2010, 11, 30);
db.posts.find({created_on: {$gte: start, $lt: end}});
最好的方法是什么?
您的开始日期对象应将当前日期时间保持在 00:00:00.000
(毫秒精度)并将今天日期的时间设置为 23:59:59.999
:
var start = new Date();
start.setHours(0,0,0,0);
var end = new Date();
end.setHours(23,59,59,999);
然后像往常一样在您的 MongoDB 查询运算符中传递修改后的日期对象:
db.posts.find({created_on: {$gte: start, $lt: end}});
如果您在 dayjs 当前日期对象上使用 dayjs date utility library, this can be done by using the startOf()
and endOf()
方法,将字符串 'day'
作为参数传递:
const start = dayjs().startOf('day'); // set to 12:00 am today
const end = dayjs().endOf('day'); // set to 23:59 pm today
您也可以使用$expr
如下:
db.posts.find({
$expr: {
$eq: [
{ $dateToString: { format: '%Y-%m-%d', date: '$$NOW' } },
{ $dateToString: { format: '%Y-%m-%d', date: '$created_on' } },
],
},
})
解决方案
要查找今天的日期结果或日期之间的数据,请使用以下内容:
NodeJS:
// Date format YYYY-MM-DD
// Suppose you want to look for 1 day data between 2021-12-27 00:00:00 and 2021-12-28 00:00:00
let start = new Date("2021-12-27");
let end = new Date("2021-12-28");
// "created_on" can be any field with a date
db.posts.find({created_on: {$gte: start, $lt: end}});
这也适用于 Mongo Shell:
db.posts.find({created_on: {$gte: new ISODate("2021-12-27T00:00:00.000Z"), $lt: new ISODate("2021-12-28T00:00:00.000Z")}})
另一种方式:
// 27th half day
db.posts.find({created_on: {$gte: new Date("2021-12-27T00:00:00.000Z"), $lt: new Date("2021-12-27T12:00:00.000Z")}})
参考
find
- Select / filter data
$gte
- Greater Than / Equal
$lt
- Lower Than