我有一个 mongoose 模式,由带有日期字段的元素数组组成
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
}
我想查找属于特定日期范围内的结果,而不考虑时间。我想做的是通过查询参数接受用户输入他想要的范围,如果不是,那么范围将适用于今天的元素。
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"
进行调用,它显示了 7 月 29 日的结果。各种查询都不起作用,所以我知道出了点问题。
我已经尝试过各种日期格式,删除时间并重置它,但到目前为止没有任何效果。
非常感谢任何帮助。
最佳答案
UTC 时间的 JavaScript Date
对象构造函数可以将输入作为“字符串”:
> 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")
或者像这样简单地将日期四舍五入到一天:
> 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")
这些是您使用基本对象构造函数和值处理没有任何小时、分钟或秒的整个日期的方法。
将 UTC 日期构造为一整天,这应该适合您的选择。
关于javascript - MongoDB with Mongoose - 选择指定日期范围丢弃时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31713342/