Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MongDB with Mongoose-选择指定的日期范围丢弃时间_Javascript_Node.js_Mongodb_Date_Mongoose - Fatal编程技术网

Javascript MongDB with Mongoose-选择指定的日期范围丢弃时间

Javascript MongDB with Mongoose-选择指定的日期范围丢弃时间,javascript,node.js,mongodb,date,mongoose,Javascript,Node.js,Mongodb,Date,Mongoose,我有一个mongoose模式,由一个带有日期字段的元素数组组成 var querySchema = new Schema({ id : String, description: String, results : [{ date : { type: Date, default: new Date }, result: Object }] }); 当我添加新元

我有一个mongoose模式,由一个带有日期字段的元素数组组成

var querySchema  = new Schema({
        id         : String,
        description: String,
        results    : [{
            date  : { type: Date, default: new Date },
            result: Object
        }]
});
当我添加新元素时,我使用
新日期
。产生如下元素:

{
    "_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
}
我想找到的结果,属于一个特定的日期范围内,无论时间。我想做的是通过查询参数接受用户输入的范围,如果不是,那么范围将是todays元素

    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(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日期设为一整天,这应该适合您的选择。

感谢@Blakes的注释。然而,这仍然没有解决我的问题。由于某些原因,MongoDB仍然无法进行日期比较。我已经传递了日期字符串a
2015/7/31
,我得到了
2015年8月31日周一00:00:00 GMT+0200(CEST)
@Ahmadassas如果它们不是注释,它们是从“字符串”或数值设置
日期的“正确”方法。您正在发送的当前字符串将不会形成正确的值。使用上面的例子。即“2015/7/31”错误!“2015-07-31”正确!抱歉,如果术语“注释”不合适。然而,我确实做到了这一点,我用您指定的方法对日期进行了硬编码
新日期(“2015/7/31”)
新日期(1406764800000)
。我想知道MongoDB中的日期类型是否需要特定的内容,因为没有进行比较。好的。。对不起,我知道新日期(2015年7月31日)
是正确的方式。这个词要么让我困惑,要么我猜你的意思都不是。我认为现在很好:)使用硬编码值
“$lte”:新日期(“2015-08-31”),“$gte”:新日期(“2015-07-31”)
应该返回大于31-7但小于31-8的日期(结果集中的两个值)。然而这不起作用,我仍然猜测它与MongoDB有关
> 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")