ISODate使用Node.js,Express和MongoDB查找

我在networking服务器上使用Node.js和Express在一个dbserver上查询MongoDB,并且遇到一个让date一起工作的问题,我在这里读了一堆关于这个问题的线程,最值得注意的是这个:

插入和查询date与MongoDB和Nodejs

我很确定我明白我应该做什么,但没有任何我尝试似乎工作。

在我的.js文件中,我有以下内容:

var todayStart = new Date(); todayStart.setSeconds(0); todayStart.setHours(0); todayStart.setMinutes(0); todayStart.setMilliseconds(0); var todayEnd = new Date(todayStart); todayEnd.setHours(23); todayEnd.setMinutes(59); todayEnd.setSeconds(59); todayEnd.setMilliseconds(999); var query = { "date": { $gte: new Date(todayStart).toISOString(), $lte: new Date(todayEnd).toISOString() } }; 

我的查询var以我期望的格式输出到控制台:

 { date: { '$gte': '2016-09-13T00:00:00.000Z', '$lte': '2016-09-13T23:59:59.999Z' } } 

我尝试使用我的查询variables或datevariables本身,并返回null(无错误)的结果:

 db.collection('test').findOne(query, function(err, result) { db.collection('test').findOne({"date" : {$gte: new Date(todayStart).toISOString(),$lte: new Date(todayEnd).toISOString() }}, function(err, result) { 

但是,如果我只是插入我的date,它会返回我的结果:

 db.collection('test').findOne({"date" : {$gte: new Date("2016-09-13T00:00:00.000Z"),$lte: new Date("2016-09-13T23:59:59.999Z") }}, function(err, result) { 

任何想法,我在这里失踪?

不需要将date转换为ISOstring格式,只需使用JSdate进行查询即可。 有关详细的解释,请参阅文档 。

您的开始date对象应将当前date时间小时保存为00:00:00.000(毫秒精度),并将当天date的小时数设置为23:59:59.999到结束datevariables:

 var todayStart = new Date(); todayStart.setHours(0,0,0,0); var todayEnd = new Date(); todayEnd.setHours(23,59,59,999); var query = { "date": { $gte: todayStart, $lte: todayEnd } }; db.collection('test').findOne(query, function(err, result) { if (err) throw new Error(); console.log(JSON.stringify(result)); }); 

如果您正在使用momentjs库,则可以通过在当前的date对象上使用startOf()endOf()方法来完成此操作,并将string“day”作为parameter passing:

 var todayStart = moment().startOf('day'); // set to 12:00 am today var todayEnd = moment().endOf('day'); // set to 23:59 pm today 

你可以使用isodate ,

  var isodate = require('isodate'); var query = { "date" : { '$gte' : isodate(todayStart ), '$lt' : isodate(todayEnd ) } };