提问人:Raymond 提问时间:9/15/2023 最后编辑:Yong ShunRaymond 更新时间:9/15/2023 访问量:36
如何在猫鼬中查询日期
How to query date between in Mongoose
问:
我的 Mongo 数据库中有一组记录。
2023-09-12T00:10:17.558+00:00
2023-09-12T00:10:45.515+00:00
2023-09-12T00:10:49.121+00:00
2023-09-12T00:12:59.252+00:00
2023-09-12T23:23:45.238+00:00
2023-09-12T23:23:46.170+00:00
2023-09-12T23:34:43.082+00:00
2023-09-13T06:40:37.457+00:00
我正在使用 Mongoose find 查询它
const findActivityLogsByFilter = async (filter: TEmployeeFilter, currentUser: IEmployeeAttributes) => {
try {
console.log(filter.startDate, filter.endDate);
return await employee_activity_logsModel
.find({
employeeId: filter.employeeId,
activity: { $in: filter.actions },
logDate: { $gte: filter.startDate, $lte: filter.endDate },
_discontinuedUser: null,
})
.sort({ _id: 'desc' })
.exec();
} catch (error) {
throw new InternalServerError(messages.generalMessage.Error);
}
};
如果我将 和 单独留在过滤器中,则会显示所有记录。但是当我放过滤器时。没有结果显示employeeId
activity
logDate
我尝试了不同的日期格式,例如
fromDate: 2023-09-12, toDate: 2023-09-12
fromDate: Tue Sep 12 2023 16:04:46 GMT+0800 (Taipei Standard Time),
toDate: Tue Sep 12 2023 16:04:46 GMT+0800 (Taipei Standard Time)
甚至用于格式化要在 和 日期过滤器上使用的日期,但没有显示任何结果。moment
from
to
我也尝试直接在 MongoDB Compass 上查询它,但没有运气。
{
employeeId:ObjectId('64f9731b4f8f4f269a44e7af'),
logDate:{
$gte:ISODate('2023-09-12'),
$lte:ISODate('2023-09-12')
}
}
我是否需要使用日期格式来查询日期,而不考虑时间?我期望的是获取日期为 2023-09-12 的所有记录,因为我的查询是 .fromDate: 2023-09-12, toDate: 2023-09-12
答:
2赞
Yong Shun
9/15/2023
#1
当您使用带有查询的日期和查询筛选文档时:startDate: new Date("2023-09-12")
endDate: new Date("2023-09-12")
logDate: { $gte: startDate, $lte: endDate }
该查询将筛选“2023-09-12T00:00:00Z”到“2023-09-12T00:00:00Z”的文档。这只会将文档与 匹配。logDate
logDate: "2023-09-12T00:00:00Z"
您应该将 1 天添加到 并使用 :endDate
$lt
filter.endDate.setDate(filter.endDate.getDate() + 1);
logDate: { $gte: filter.startDate, $lt: filter.endDate }
因此,查询结果将变为
logDate: { $gte: new Date("2023-09-12"), $lt: new Date("2023-09-13") }
获取文件 在“2023-09-12”上。logDate
评论
0赞
Raymond
9/15/2023
嗨,勇。如果成功,将尝试您的解决方案并在评论中更新
0赞
Yong Shun
9/15/2023
演示 @ Mongo Playground
0赞
Raymond
9/15/2023
伟大!它按预期工作。我的错,我没有检查格式化的时间new Date("2023-09-12")
0赞
user20042973
9/15/2023
既然这个答案解决了你的问题,你应该接受并投票
0赞
Raymond
9/16/2023
是的,我已经投了赞成票,并接受了它作为我问题的解决方案:)
评论
logDate
Date
const EmployeeActivityLogsSchema = new Schema({ sessionId: { type: Schema.Types.ObjectId, required: true, default: mongoose.Types.ObjectId, }, employeeId: { type: Schema.Types.ObjectId, required: true, ref: 'Employee', }, activity: { type: String, enum: Object.values(constants.activityActions), required: true }, logDate: { type: Date, default: Date.now, required: true }, }).add(BaseSchema);