修改对象中的日期以在 mongoose 中进行聚合 $match 查询
Posted
技术标签:
【中文标题】修改对象中的日期以在 mongoose 中进行聚合 $match 查询【英文标题】:Modify date in object for aggregate $match query in mongoose 【发布时间】:2018-01-29 19:46:39 【问题描述】:我将这个对象发送到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
发送查询:
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;
);
请帮助我使用请求的功能或建议另一种方法来让我查询日期范围。
【问题讨论】:
你不能让你的客户端发送正确的数据,而不是在服务器端打补丁吗? 你能不能简单地写这样的东西:req.body.startDate.$gte = new Date(req.body.startDate.$gte)
你试过在 MongoDB 上运行它吗?
startDate
在您的架构中是如何定义的?
当我尝试使用new Date("1111-11-11T00:00:00.000Z")
转换日期时效果很好,如您所示。
【参考方案1】:
正如@dnickless 在 cmets 中所说,我需要插入
req.body.startDate.$gte = new Date(req.body.startDate.$gte)
req.body.startDate.$lte = new Date(req.body.startDate.$lte)
在我的mongoose
查询之前。
【讨论】:
以上是关于修改对象中的日期以在 mongoose 中进行聚合 $match 查询的主要内容,如果未能解决你的问题,请参考以下文章