MongoDB与Mongoose – select一个指定的date范围丢弃时间

我有一个mongoose模式组成的数组与date字段的元素

var querySchema = new Schema({ id : String, description: String, results : [{ date : { type: Date, default: new Date }, result: Object }] }); 

当我添加新的元素,我使用New Date 。 导致如下的元素:

 { "_id" : ObjectId("55b96289c9dcbe79207c4b08"), "id" : "11", "description" : "List of graphs loaded in the KB (24 graphs as of 09/05/2015 + 5 default Virtuoso graphs)", "results" : [ { "result" : "", "_id" : ObjectId("55b96289c9dcbe79207c4b09"), "date" : ISODate("2015-07-29T22:00:00.000Z") }, { "result" : "", "_id" : ObjectId("55b962e05489d4de20a99f87"), "date" : ISODate("2015-07-31T22:00:00.000Z") }, { "result" : "", "_id" : ObjectId("55b963284f5083492119ef5b"), "date" : ISODate("2015-08-29T22:00:00.000Z") } ], "__v" : 0 } 

不pipe时间如何,我都希望find属于特定date范围的结果。 我想要做的就是通过查询参数接受他想要的范围内的用户input,如果不是那么范围将是今天的元素。

  router.route('/aggregate') .get(function(req, res) { if (req.param('id')) { // Extract the date range filterin query paramteres if they were passed var start = new Date(req.param('start')) || new Date; var end = req.param('end') ? new Date(req.param('end')) : new Date; Query.aggregate([ { "$match": { id : req.param('id'), "results.date": { "$lt": end, "$gt": start } }, }],function(err,result) { res.json(result); }); } else res.json({message: 'Invalid request. Please specify a query ID'}); }); 

我尝试了例如使用参数?id=11&start="2014, 7, 31"进行调用,并显示?id=11&start="2014, 7, 31" 29日的结果。 各种查询不起作用,所以我知道有什么问题。

我已经尝试了各种date格式,删除时间重置它,但没有任何工作到目前为止。

将不胜感激任何帮助。

UTC时间的JavaScript Date对象构造函数可以将input作为“String”:

 > new Date("2014-07-31") ISODate("2014-07-31T00:00:00Z") 

但这是正确的:

 > new Date(2015,7,31) ISODate("2015-08-30T14:00:00Z") 

要么是这样的:

 > new Date("2015/7/31") ISODate("2015-07-30T14:00:00Z") 

UTC还有其他有效的构造函数值,例如数字值,如果适合:

 > new Date(1406764800000) ISODate("2014-07-31T00:00:00Z") 

或者简单地把date整理到如下date:

 > var date = new Date() > date ISODate("2015-07-30T01:42:23.631Z") > new Date( date.valueOf() - ( date.valueOf() % ( 1000 * 60 * 60 * 24 ) ) ) ISODate("2015-07-30T00:00:00Z") 

这些是你的方法,使用基本的对象构造函数和值来处理整个date,而不需要几分钟或几秒钟的时间。

构build一个UTCdate为一整天,这应该适合您的select。