我正在尝试查找当前时间介于文档的startour和endhour之间的所有文档。我为小时和分钟设置了不同的字段。 我的架构
const mySchema = new Schema({
startHour: { type: Number},
endHour: { type: Number},
startMinute: { type: Number},
endMinute: { type: Number}
})
我在下面写了查找不起作用的查询。这里的小时值和分钟值来自http查询我在查询中使用之前将它们转换为int
find({
$and : [
{ $or: [{starthour : { $lt: hour}},
{ $and : [ {starthour: { $eq : hour}}, {startMinute: { $gt: minute}}]}
]},
{ $or: [{endHour : { $gt: nsh}},
{ $and : [ {endhour: { $eq : hour}}, {endMinute: { $gt: minute}}]}
]},
],
})
这应该返回所有文件(小时大于和小于starthour和endhour)或(如果starthour或endhour等于小时而不是startminute应该大于分钟)。
答案 0 :(得分:0)
这里的逻辑是:
所以我使用mongo聚合来实现这一点。
var hour = 11;
var minute = 0;
db.getCollection('testHours').aggregate([
{ $addFields: {
isMinMatch : {
$cond : [{ $eq : [ "$endHour", hour ] } , { $gte : [ "$endMinute" , minute] }, true ]
}
}
},
{$match: {startHour : { $lte: hour}, endHour : { $gte: hour}, isMinMatch: true } },
{ $project : { isMinMatch: 0 } }
])