Sequelize.js 基于另一个Sequelize查询的结果执行Sequelize查询
我有一个postgres数据库,我正在使用Sequelize。从表车辆和预订中,我试图在给定开始日期和结束日期的情况下获得所有可用车辆 如果我使用以下方法搜索具有给定日期的预订:Sequelize.js 基于另一个Sequelize查询的结果执行Sequelize查询,sequelize.js,Sequelize.js,我有一个postgres数据库,我正在使用Sequelize。从表车辆和预订中,我试图在给定开始日期和结束日期的情况下获得所有可用车辆 如果我使用以下方法搜索具有给定日期的预订: Bookings.findAll({ where: { [Op.or]: [ { dateOut : { [Op.gt]: req.body.startDate} }, { dateIn : { [Op.lt]: req.body.startDat
Bookings.findAll({
where: {
[Op.or]: [
{ dateOut : { [Op.gt]: req.body.startDate} },
{ dateIn : { [Op.lt]: req.body.startDate} }
],
[Op.or]: [
{ dateOut : { [Op.gt]: req.body.endDate} },
{ dateIn : { [Op.lt]: req.body.endDate} }
]
}
})
我得到所有在这些日期预订的车辆。例如,使用startDate 2020-12-12和endDate 2020-12-13搜索可获得以下预订:
[
{
"id": 13,
"startDate": "2020-12-05T00:00:00.000Z",
"endDate": "2020-12-13T00:00:00.000Z",
"vehicleId": 1
},
{
"id": 12,
"startDate": "2020-12-12T00:00:00.000Z",
"endDate": "2020-12-13T00:00:00.000Z",
"vehicleId": 2
}
]
是否可以使用Sequelize从车辆表中返回在此初始搜索中未找到的车辆
更新
按照阿纳托利的回答,我有这个。它根据第一个查询的结果工作:
.then(bookingData => {
const bookedVehicleIds = bookingData.map(x => x.vehicleId)
Vehicles.findAll({
where: {
id: {
[Op.notIn]: bookedVehicleIds
}
}
})
.then(results => {
res.send(results);
})
})
我看不到简单的方法来执行一个查询而不是两个查询(仅通过
sequelize.where
和sequelize.literal
使用notexists
子查询)。
因此,如果您已经有预订
车型实例,您只需使用Op.notIn
即可获得在给定时间段内未预订的所有车辆
:
const bookings=await bookings.findAll({
//…如果省略了条件
})
const bookedVehicleIds=bookings.map(x=>x.vehicleId)
const notBookedVehicles=等待车辆。findAll({
其中:{
身份证:{
[Op.notIn]:预订的车辆ID
}
}
})
感谢您抽出时间。我是一个新的续集,并试图把你的答案融入到我的方式中,我已经更新了我的问题。这似乎是可行的,但我希望您能解释一下x的位置。x
只是表示数组中一个元素的参数名称。你可以给它取任何名字