我将此对象发送到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
和$match
向mongoDB
发送查询:< / 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;
});
请使用所请求的功能帮助我,或建议另一种方法,以便我查询日期范围。
答案 0 :(得分:1)
正如@dnickless在评论中所说,我需要插入
req.body.startDate.$gte = new Date(req.body.startDate.$gte)
req.body.startDate.$lte = new Date(req.body.startDate.$lte)
在mongoose
查询之前。