Node.js 如何使用mongoose在HH:mm格式时间之间查找MongoDB中的所有文档?

Node.js 如何使用mongoose在HH:mm格式时间之间查找MongoDB中的所有文档?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我试图通过文档开始时间查询mongoose模型,documet有一个“activeTimes”字段,它是一个对象数组, 每个对象有3个键:工作日,开始时间,结束时间 模式示例: const classSchema = new Schema({ activeTime: [{ weekday: { type: Number, required: true, min: 0, max: 6 },

我试图通过文档开始时间查询mongoose模型,documet有一个“activeTimes”字段,它是一个对象数组, 每个对象有3个键:工作日开始时间结束时间

模式示例:

const classSchema = new Schema({
    activeTime: [{
        weekday: {
        type: Number,
        required: true,
        min: 0,
        max: 6
     },
     startTime: {
       type: String,
       required: true
     },
     endTime: {
       type: String,
       required: true
     }
   }]
 });
我希望查询模型并查找12:00到15:00之间的所有文档。。。但由于我使用的是HH:mm格式,所以mongoose似乎无法获取正确的结果

有没有办法正确地查询这个问题


注意:我无法以完整格式保存日期,因为每周都会根据
weekday
属性重复该类。

您应该能够将所需的时间字符串与$lte或$gte运算符进行比较,因为字段的格式是一致的,$gt和$lte on字符串只是进行词典比较。查看此处了解更多信息:

不过,出于逻辑和性能方面的原因(这就是我在谈论代码气味时所写的内容),我建议您将startTime和endTime从“00:00”字符串拆分为一个或一个对象,如下所示:

startTime: {
 hour: Number,
 minute: Number,
 required: true //note that {} would also be a valid value unless you make hour and minute required separately
}

如果您只有偶数个时间,例如15:00或12:00,那么查询该时间将很容易,因为您可以使用$gte和$lte运营商以与查询日期相同的方式查询该时间。如果您必须包含会议记录,它可能会如下所示:

startTime: {
 hour: Number,
 minute: Number,
 required: true //note that {} would also be a valid value unless you make hour and minute required separately
}
e、 g:


注意:您必须对此进行更多调整,因为它当前还返回endTime:15:59之类的值。

可能重复@AnthonyWinzlet。给定的问题使用日期对象类型,我使用字符串类型。。。从技术上讲不是重复的,那么您应该将其保存为第二个答案中提到的
timeOfDay
。将时间保存为字符串并不是最好的方法,即使您也无法使用字符串时间进行查询。
(HH:mm)
。您好,我最终将时间表示为数组,谢谢!
Class.find(
 { 'startTime.hour': {$gte: 12},
 { 'startTime.minute': {$gte: 0},
 { 'endTime.hour': {$lte: 15},
 { 'endTime.minute': {$gte: 0},
)