我正在开发出租车预订 api。我面临的问题是一个 getAllBookings api,管理员将使用它从预订数据库中获取所有预订的历史记录。说到数据库,我将稍微分享一下我的预订模型和用户模型的数据库模型。我面临的问题是,当我使用参数中的 userId 或 driverId 进行搜索查询时,我会正确获得响应以及具有该特定 ID 的所有详细信息。但是,当我尝试在参数中为该 userId 的同一用户发送名称查询或电子邮件查询时,它会返回一个空的预订数组。 以下是我的预订模型:
const mongoose = require('mongoose');
const bookingSchema = new mongoose.Schema({
user: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
required: true
},
driver: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
required: true
},
pickupLocation: {
address: {
type: String,
required: true
},
latitude: {
type: Number
},
longitude: {
type: Number
},
},
dropoffLocation: {
address: {
type: String,
required: true,
},
latitude: {
type: Number,
},
longitude: {
type: Number,
},
},
fare: {
type: Number,
required: true,
},
bookingStatus: {
type: String,
required: true,
default: 'Available',
}
},
{
timestamps: true
});
module.exports = mongoose.model("Booking", bookingSchema);
用户模型:
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
name: {
type: String,
required: [true, "Please add your Name"],
trim: true
},
email: {
type: String,
required: [true, "Please add the user email address"],
unique: [true,"Email address already taken"],
trim: true
},
password: {
type: String,
required: [true, "Please add the password"],
trim: true,
},
phoneNumber: {
type: String,
required: [true, "Please add Phone Number"],
trim: true
},
role: {
type: String,
required: true,
default: 'user',
enum: ['admin', 'user', 'driver'],
},
licenseNumber: {
type: String,
trim: true
},
carModel: {
type: String,
trim: true
},
carNumber: {
type: String,
trim: true
},
isDeleted: {
type: Boolean,
default: false
},
isAvailable: {
type: Boolean,
default: false
},
location: {
type: {
type: String,
enum: ['Point']
},
coordinates: {
type: [Number] //lat and long
}
},
},
{
timestamps: true
});
// Index the location field for geospatial queries
userSchema.index({ location: '2dsphere' });
module.exports = mongoose.model("User", userSchema);
这里是控制器功能供您参考:
const getAllBookings = async(req, res) => {
logger.info('Inside getAllBookings');
try{
const {
page = 1,
limit = 10,
name,
email,
role,
userId,
driverId,
} = req.query;
let filter = {};
if (name) {
filter['user.name'] = { $regex: name, $options: 'i' };
}
if (email) {
filter['user.email'] = { $regex: email, $options: 'i' };
}
if(role){
filter['user.role'] = role;
}
if(userId){
filter.user = userId;
}
if(driverId){
filter.driver = driverId;
}
const skip = (page - 1) * limit;
console.log(filter);
const bookings = await Booking.find(filter)
.populate('user driver')
.skip(skip)
.limit(limit)
.sort({createdAt: -1})
.lean()
.exec();
console.log("bookings", bookings);
const count = await Booking.countDocuments(filter);
const totalPages = Math.ceil(count / limit);
res.status(200).json({bookings, totalPages, currentPage: +page});
} catch(error){
logger.error(`Error in getAllBookings: ${error.message}`);
res.status(500).json({
message: 'Server Error',
});
}
};
这是 | 时的邮递员回复 这是 | 时的邮递员回复 如您所见,它仅在传递 id 时给出结果。请协助我调试它,因为我希望它在发送姓名或电子邮件时也能正常工作。
我试图通过安慰一些行来调试它。但我仍然无法弄清楚问题