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