[英]mongoose populate returns undefined
我正在為一家運輸公司建立一個旅行預訂網站。 我正在嘗試在其中一頁上顯示進行預訂的人的姓名。
我有一個用戶 model 和一個預訂 model。
const mongoose = require("mongoose");
const passportLocalMongoose = require("passport-local-mongoose");
const Schema = mongoose.Schema;
const UserSchema = new Schema({
email: {
type: String,
required: true,
unique: true
},
firstName:{
type: String,
required: true
},
lastName: {
type: String,
required: true
},
phoneNumber: {
type: String,
required: true
},
gender: {
type: String,
enum: ["male", "female"]
}
});
UserSchema.plugin(passportLocalMongoose);
module.exports = mongoose.model("User", UserSchema);
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const BookingSchema = new Schema({
tripDate: {
type: String,
required: true
},
pickupTime: {
type: String,
required: true
},
pickupStreet: {
type: String,
required: true
},
pickupCity: {
type: String,
required: true
},
pickupState: {
type: String,
required: true
},
pickupZip: {
type: Number,
required: true
},
dropOffStreet: {
type: String,
required: true
},
dropOffCity: {
type: String,
required: true
},
dropOffState: {
type: String,
required: true
},
dropOffZip: {
type: Number,
required: true
},
booker: {
type: Schema.Types.ObjectId,
ref: "User"
}
}, {
timestamps: true
});
module.exports = mongoose.model("Booking", BookingSchema);
const express = require("express");
const router = express.Router();
const catchAsync = require("../utilities/catchAsync");
const ExpressError = require("../utilities/expressError");
const Booking = require("../models/booking");
const Joi = require("joi");
const {isLoggedIn} = require("../middleware/index");
const User = require("../models/user");
const mongoose = require("mongoose");
router.get("/booking/:id", catchAsync(async (req, res) => {
const booking = await Booking.findById(req.params.id).populate("booker");
console.log(booking);
if (!booking) {
req.flash("error", "Cannot find that booking");
return res.redirect("/booking");
}
res.render("booking/show", {booking});
}));
因此,當我在填充后控制台日志“預訂”時,日志上的用戶 model 沒有顯示任何信息。
除非通過回調或顯式調用 execPopulate(),否則不會發生填充。 第二次傳遞相同的路徑將覆蓋以前的路徑選項。 有關選項的說明,請參閱 Model.populate()。
代碼更新: populate("booker") .exec();
const booking = await Booking.findById(req.params.id).populate("booker").exec();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.