如何解决在两个日期之间查询会在MongoDB中返回错误的结果吗?
注意:导入从本地环境中导出的集合后,我才在生产中遇到此问题。
因此,在生产中,当我在Robo 3T中运行它时:
db.getCollection('...').find({created_at: {$gte: new Date(2020,7,19),$lt: new Date(2020,20)}})
它给了我正确的结果:
{ created_at: 2020-08-18 22:00:46.244Z },{ created_at: 2020-08-18 22:11:25.135Z },{ created_at: 2020-08-18 22:19:27.921Z },{ created_at: 2020-08-19 08:56:44.534Z }
。
我使用Date
类型将这样的日期存储在模型中:
....
created_at: {
type: Date,default: new Date()
}
我的UI中有两个重大日期选择器。在页面加载时,将提取今天创建的记录(2020年8月19日)。
my.component.ts
const fromDate = new Date();
const toDate = new Date();
const filter = {
dates: {
from: {
year: fromDate.getFullYear(),// 2020
month: fromDate.getMonth(),// 7
day: fromDate.getDate() // 19
},to: {
year: toDate.getFullYear(),// 2020
month: toDate.getMonth(),// 7
day: toDate.getDate() // 19
}
}
};
然后我将filter
对象发送到API。
if (req.body.filters.dates) {
let fromDate = req.body.filters.dates.from;
let toDate = req.body.filters.dates.to;
dateFilters = {created_at: {
"$gte": new Date(fromDate.year,fromDate.month,fromDate.day),"$lt": new Date(toDate.year,toDate.month,(toDate.day + 1))
}
};
}
MyModel.find(dateFilters,function(err,results) {
if (err) {
return next(err);
} else if (results) {
if (results.length) {
return res.status(200).json({
data: results
});
} ...
}
});
但该API仅返回今天的一条记录,而不是4(我上面提到的最后一条,{ created_at: 2020-08-19 08:56:44.534Z }
)。如果我选择8/18/2020-8/18/2020,则它将返回其他3条记录。如果我选择2020年8月18日-2020年8月19日,则返回所有4。
前3条记录是在我的本地环境中创建的,第4条记录是在生产环境中创建的。如果有帮助,我们的生产服务器位于(GMT-7)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。