Фильтрация поиска и обновления мангуста

#mongodb #mongoose

Вопрос:

Я пытаюсь запретить пользователю создавать новую вставку, если дата начала нового расписания находится между уже запланированными датами. Например, идентификатор сотрудника 123 уже подал заявление на отпуск с 2021-04-05 по 2021-04-09, я должен запретить пользователю подавать повторное заявление, если дата начала находится в диапазоне от 2021-04-05 до 2021-04-09.

Вот моя модель:

 const mongoose = require("mongoose");
const {ObjectID} = mongoose.Schema.Types;

const ScheduleSchema = mongoose.Schema({
    startdate: {type: Date},
    enddate: {type: Date},
    dateadded: {type: Date,default: Date.now},
    userid:[{type:ObjectID, ref:"User"}],
  },{ timestamps: true });
  
  module.exports = mongoose.model("Schedule", ScheduleSchema)
  const Schedule = require('../models/schedules')
 

И вот мой код, который я застрял здесь, используя findOneAndUpdate, и, конечно, он не сработал:

 router.post('/schedule/addschedule/:id',JWTAuthenticatToken, async (req, res) => {   
   const{startdate,enddate} = req.body
   const existingSchedule = await CourseSchedule.findOneAndUpdate({startdate: startdate,enddate:enddate,course:req.params.id},{startdate: startdate,enddate:enddate,course:req.params.id},{ new: true, upsert: true })
   return res.json(existingSchedule);       
});
 

Как мне это сделать? Заранее большое спасибо и ценю любую помощь. Спасибо

Ответ №1:

Наконец-то удалось заставить его работать. Вот ответ, и я надеюсь, что он будет полезен здесь.

   const existingSchedule = await Schedule.findOne({$and:[{startdate:{$lte:startdate}},{enddate:{$gte:startdate}},{userid:req.params.id}]})