如何修复猫鼬“ gt”和“ lt”不起作用

时间:2018-12-23 05:27:11

标签: node.js mongodb mongoose mongodb-query mongoose-schema

我正在尝试使用猫鼬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);

2 个答案:

答案 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);
}

就这样...