我正在尝试通过文档开始时间查询猫鼬模型,文档中有一个“ 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格式,因此似乎猫鼬无法获取正确的文档结果...
有没有一种方法可以正确查询?
注意:我无法以完整格式保存日期,因为基于weekday
属性,每周都会重复该类。
答案 0 :(得分:1)
您应该能够将所需的时间字符串与$ lte或$ gte运算符进行比较,因为字段的格式是一致的,并且字符串上的$ gt和$ lte只是按字典顺序进行比较。在此处查看更多信息:http://technotip.com/4101/string-comparison-mongodb/
出于逻辑和性能方面的考虑(我在写代码时写的就是这样),我还是建议您将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
}
或
startTime [Number, Number] // where startTime[0] is the hour and startTime[1] is the minute
如果您只有偶数时间,例如15:00或12:00,查询起来很容易,因为您可以使用$ gte和$ lte运算符以与查询日期相同的方式进行查询。如果必须包括分钟,它可能看起来像这样:
例如:
Class.find(
{ 'startTime.hour': {$gte: 12},
{ 'startTime.minute': {$gte: 0},
{ 'endTime.hour': {$lte: 15},
{ 'endTime.minute': {$gte: 0},
)
注意:您必须对此进行更多调整,因为它当前还返回诸如endTime:15:59的值。