Sequelize.js 基于另一个Sequelize查询的结果执行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

我有一个postgres数据库,我正在使用Sequelize。从表车辆预订中,我试图在给定开始日期和结束日期的情况下获得所有可用车辆

如果我使用以下方法搜索具有给定日期的预订:

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
只是表示数组中一个元素的参数名称。你可以给它取任何名字