Mongoose findOneAndUpdate多字段过滤时$lt运算符失效问题
问题原因及解决方案
问题出在你直接把包含MongoDB操作符的查询条件塞进了req.params里——req.params是Express专门用来存储URL路径参数的对象,它的属性值默认是字符串类型,当你把带$lt的对象赋值给它时,很可能被Express的参数解析逻辑干扰,导致Mongoose无法正确识别日期过滤条件。
修改后的代码
const get_capture_for_processing = async function (req, res) { // 单独构建查询对象,避免req.params的干扰 const query = { active: true, inprogress: false, date: {$lt: new Date(new Date().setUTCHours(0, 0, 0, 0))} }; console.log(query); const result = await Capture.findOneAndUpdate(query, {'inprogress':true}).sort({"elapsed": -1}); res.json(result); }
额外验证点
- 打印
query时确认date字段是{ $lt: 当日零点UTC时间 }的正确格式,没有被转成字符串或其他异常结构; - 检查
Capture模型中date字段的类型是否定义为Date,类型不匹配也会导致日期比较失效。
内容的提问来源于stack exchange,提问作者Edward Porter
相关产品推荐
相关产品推荐

