gpt4 book ai didi

sequelize.js - 基于另一个 sequelize 查询的结果 sequelize 查询

转载 作者:行者123 更新时间:2023-12-03 22:24:50 29 4
gpt4 key购买 nike

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

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 从 Vehicles 表中返回在此初始搜索中未找到的车辆?
更新
按照阿纳托利的回答,我有这个。它的作用是响应第一个查询的结果:
.then(bookingData => {
const bookedVehicleIds = bookingData.map(x => x.vehicleId)

Vehicles.findAll({
where: {
id: {
[Op.notIn]: bookedVehicleIds
}
}
})
.then(results => {
res.send(results);
})

})

最佳答案

我认为没有简单的方法可以执行一个查询而不是两个查询(仅通过 NOT EXISTSsequelize.where 使用 sequelize.literal 子查询)。
因此,如果您已经有 Booking 模型实例,则可以使用 Op.notIn 来获取在给定时间段内尚未预订的所有 Vehicles:

const bookings = await Bookings.findAll({
// ... where condition omitted
})
const bookedVehicleIds = bookings.map(x => x.vehicleId)
const notBookedVehicles = await Vehicles.findAll({
where: {
id: {
[Op.notIn]: bookedVehicleIds
}
}
})

关于sequelize.js - 基于另一个 sequelize 查询的结果 sequelize 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65430016/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com