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 ) } };