У меня есть таблица с именем 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
Схема
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);
})
Результат в браузереКод после комментирования фильтров даты
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.
так вы хотите, чтобы все смены между ShiftStartTime
и ShiftEndTime
были?
@SaurabhMistry Да, верю.
мой ответ работает или нет?
@SaurabhMistry Боюсь, что ваш ответ не получает требуемые данные. Я собираюсь обновить вопрос и добавить больше данных.
Позвольте нам продолжить обсуждение в чате.
преобразовать дату ввода в формат 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
}
}
]
})
каково ваше имя поля
datetime
в вашей схеме модели?