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。