在mongoose

时间:2017-08-21 16:46:49

标签: javascript mongodb date mongoose aggregation-framework

我将此对象发送到node.js应用程序中的控制器:

var req.body = {
"startDate": {
    "$gte": "1111-11-11T00:00:00.000Z",
    "$lte": "2017-08-17T00:00:00.000Z"
}
}

我想要一个可以在这个对象的startDate键上运行的函数,并给我这个输出:

var req.body = {
"startDate": {
    "$gte": new Date("1111-11-11T00:00:00.000Z"),
    "$lte": new Date("2017-08-17T00:00:00.000Z")
}
}

我需要此类型对象的原因是我使用mongoose使用此功能使用aggregate$matchmongoDB发送查询:< / p>

var mongoose = require('mongoose');
var Activity = mongoose.model('Activity');
mongoose.set('debug', true);

var sendJSONresponse = function(res, status, content) {
res.status(status);
res.json(content);
}; 

module.exports.readOther = function (req, res){

    Activity
        .aggregate([
            {$match: req.body }
        ])
        .exec(function(err, output) {
            sendJSONresponse(res, 200, output);
    });
};

mongoose要求指定日期类型new Date(,因此,不会返回应用原始对象的文档。 mongoose现在发送给服务器的查询(为便于阅读而格式化)是:

Mongoose: activity.aggregate([ 
    { '$match': 
        { 
            startDate: { '$gte': '1111-11-11T00:00:00.000Z', '$lte': '2017-08-17T00:00:00.000Z' }
        }, 
], {})

我已尝试以下操作来修改对象,但它只是将其转换为实际日期,mongoose无法正确处理

Object.keys(req.body.startDate).map(function (key) {
    req.body.startDate[key] = eval(new Date( req.body.startDate[key] ));
    return req.body.startDate;
  });

请使用所请求的功能帮助我,或建议另一种方法,以便我查询日期范围。

1 个答案:

答案 0 :(得分:1)

正如@dnickless在评论中所说,我需要插入

req.body.startDate.$gte = new Date(req.body.startDate.$gte)
req.body.startDate.$lte = new Date(req.body.startDate.$lte)

mongoose查询之前。