簡體   English   中英

mongoose 填充返回未定義

[英]mongoose populate returns undefined

我想做的事


我正在為一家運輸公司建立一個旅行預訂網站。 我正在嘗試在其中一頁上顯示進行預訂的人的姓名。
我有一個用戶 model 和一個預訂 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);

預訂model

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM