我正在尝试使用猫鼬ODM让所有工作人员都在给定的日期范围内,但是似乎找不到办法。
我尝试使用不同的日期格式,但是想出了在数据库中存储ISO日期的方法。现在,它以ISODate("2018-12-23T00:00:00Z")
格式保存和检索日期。
但是,我想让所有工作人员使用的日期范围是$gte
和$lte
/**
* Get all attendance of one member for a specific time frame(a month)
*
*/
module.exports.getAttendanceTimeFrame = function(params,callback){
console.log(new Date(params.frm).toISOString());
AttendanceStaff.find({staff_id: params.staff_id, date:{$gte:params.frm, $lte:params.to}},callback);
}
这什么都没给,但是这给了当天签署的所有工作人员
Model.find({date:'2018-12-22'},callback);
答案 0 :(得分:0)
那是因为您的参数正在发送日期和时间,而gte和lte仅带日期。您的日志console.log(new Date(params.frm).toISOString());
的输出应显示时间戳记
答案 1 :(得分:0)
一个愚蠢的问题。对不起.. 我实际上发现了问题所在。这是一个很糟糕的 TYPO
在这里我们可以使用不同的方法来实现 由于我们仅存储日期,因此猫鼬会自动将我们提供的所有值转换为ISODate格式(日期+时间)。它实际上非常好,因为日期或时间的模式相似。所以我们可以简单地使用上面给出的代码
/**
* Get all attendance of one member for a specific time frame(a month)
*
*/
module.exports.getAttendanceTimeFrame = function(params,callback){
console.log(new Date(params.frm).toISOString());
AttendanceStaff.find({staff_id: params.id, date:{$gte:params.frm, $lte:params.to}},callback);
}
实际上而不是staff_id: params.staff_id ,我要做的就是 params.id 因为那就是我在http GET req中定义staff_id的方式。这是/ staff / :id /:frm /:to
无论如何,我们甚至可以使用在哪里执行此操作以及另一种方法...
/**
* Get all attendance of one member for a specific time frame(a month)
*
*/
module.exports.getAttendanceTimeFrame = function(params,callback){
console.log(params.id);
AttendanceStaff.find({date:{$gte:params.frm, $lte:params.to}}).sort({date:-1}).where({staff_id:params.id}).exec(callback);
}
就这样...