Преобразовать между предложением sql в мангуст

У меня есть таблица с именем OgShift, и я хочу получить все записи, если текущий DateTime находится между ShiftStartTime и ShiftEndTime. Он отлично работает в SQL, но мне нужно реализовать его для MongoDB с помощью node and mongoose.

вот мой запрос.

SELECT * FROM dbo.OgShift 
WHERE '2018-12-18 04:43:59.810' BETWEEN ShiftStartTime AND ShiftEndTime
AND isActive=1

Сбор базы данныхПреобразовать между предложением sql в мангуст

Схема

let OgShift=new mongoose.Schema({
    ShiftName:String,
    ShiftStartTime:Date,
    ShiftEndTime:Date,
    isActive:Boolean    
})

Код маршрута

app.get('/shift',async (req,res)=>{
    var ShiftStartTime = new Date(req.query.ShiftStartTime).toISOString();
    var ShiftEndTime = new Date(req.query.ShiftEndTime).toISOString();

    let result = await OgShift.OgShift.find({
        ShiftStartTime: {
            $gt: ShiftStartTime
        },
        ShiftEndTime: {
            $lt: ShiftEndTime
        }
    });
    res.send('ShiftStartTime is' + ShiftStartTime + " end date is " + ShiftEndTime + result);

})

Результат в браузереПреобразовать между предложением sql в мангустКод после комментирования фильтров даты

app.get('/shift',async (req,res)=>{
    var ShiftStartTime = new Date(req.query.ShiftStartTime).toISOString();
    var ShiftEndTime = new Date(req.query.ShiftEndTime).toISOString();

    let result = await OgShift.OgShift.find({});
    res.send('ShiftStartTime is' + ShiftStartTime + " end date is " + ShiftEndTime + result);

})

Результат после комментирования фильтровПреобразовать между предложением sql в мангуст

каково ваше имя поля datetime в вашей схеме модели?

Saurabh Mistry 18.12.2018 11:05

пожалуйста, добавьте схему вашей модели в вопрос

Saurabh Mistry 18.12.2018 11:06

Структура такая же, как указано выше в запросе SQL.

Aay Que 18.12.2018 11:07

так вы хотите, чтобы все смены между ShiftStartTime и ShiftEndTime были?

Saurabh Mistry 18.12.2018 11:19

@SaurabhMistry Да, верю.

Aay Que 18.12.2018 11:20

мой ответ работает или нет?

Saurabh Mistry 18.12.2018 12:10

@SaurabhMistry Боюсь, что ваш ответ не получает требуемые данные. Я собираюсь обновить вопрос и добавить больше данных.

Aay Que 18.12.2018 12:50

Позвольте нам продолжить обсуждение в чате.

Aay Que 18.12.2018 13:31
Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
1
8
416
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

преобразовать дату ввода в формат ISO, а затем применить поисковый запрос

сделать запрос получить: /find?ShiftStartTime='start_date'&ShiftEndTime='end_date'

app.get('/find',function(req,res){

    var ShiftStartTime=new Date(req.query.ShiftStartTime).toISOString();
    var ShiftEndTime=new Date(req.query.ShiftEndTime).toISOString();

    OgShift.find({
       isActive:true,
       $and:[{
               ShiftStartTime:{$gte:ShiftStartTime}
             },
             {
              ShiftEndTime:{$lte:ShiftEndTime}
             }],       
    },function(err,result){
      console.info(err);
      console.info(result);
      if (!err && result){
        return res.stauts(200).json({result:result});
      }
    });

});

Попробуйте это, я надеюсь, это сработает для вас

let result = await OgShift.OgShift.find({
        ShiftStartTime: {
             $gte:new Date("2018-01-12"),
        },
        ShiftEndTime: {
            $lt: new Date("2019-12-31")
        }
    })
Ответ принят как подходящий

Ну, вы не можете написать запрос в формате SQL, но должны сделать это монго. После многих попыток мне наконец удалось с логикой ниже.

let result = await OgShift.OgShift.find({
        $and: [{
            isActive: true
            }
        }],
        $or: [{
                "ShiftStartTime": {
                    "$gte": start,
                    "$lte": end
                }
            },
            {
                "ShiftEndTime": {
                    "$gte": start,
                    "$lte": end
                }
            }
        ]
    })

Другие вопросы по теме