如何在 Mongodb(Mongoose) 中加入模型并表达?

How to Join model in Mongodb(Mongoose) and express?

我有 3 个模型 'User','Doctor','Appointment',我想让用户预约,然后当他预约时我想 return医生姓名,还有当医生得到预约时我想要 return 用户名。

用户模型:

const mongoose = require('mongoose');

const User = mongoose.Schema({
name: {
    type: String,
    required: true,

},
email: {
    type: String,
    required: true,

},

password: {
    type: String,
    required: true,

},
 })

const User = mongoose.model('User', User);

 module.exports = { User };

医生型号:

const mongoose = require('mongoose');

const Doctor = mongoose.Schema({
name: {
    type: String,
    required: true,

},
email: {
    type: String,
    required: true,

},

password: {
    type: String,
    required: true,

 },

})

const Doctor = mongoose.model('Doctor', Doctor);

module.exports = { Doctor };

预约模式:

 const mongoose = require('mongoose');

 const Appointment = mongoose.Schema({
date: {
    type: Date,

},
time: {
    type: Date
},

_userID: {
    type: mongoose.Types.ObjectId,
    ref: 'User'
},

_doctorID: {
    type: mongoose.Types.ObjectId,
    ref: 'Doctor'
}
})

 const Appoitment = mongoose.model('Appoitment', Appointment);

    module.exports = { Appoitment };

预约:

   const express = require('express');
   const { Appointment } = require('../DataBase/Models/appointment.model');
   const router = express.Router();



  router.get("/appointment/:id", async (req, res) => {
  try {
    const appointment = await Appointment.find({
        user: req.params.id,
    }).populate({
        path: "doctor",
        model: "Doctor",
    });
    res.send({
        status: 200,
        message: "SuccessFull",
        Appointments: appointment,
    });
} catch (error) {
    res.send({
        status: 400,
        message: `Error: ${error}`,
    });
}
});

 router.post("/appointment", async (req, res) => {

try {
    const makeAppointment = new Appointment(req.body);
    const result = await makeAppointment.save();
    res.send({
        status: 200,
        message: "SuccessFull",
        Appointment: result,
    });
} catch (error) {
    res.send({
        status: 404,
        message: `Error : ${error}`,
    });
}
 });

我的问题是如何return 与医生的预约与用户名相同??

如果您想要select特定的列。 它看起来像 .populate('author', 'name'). // only return the Author name

.populate 方法中,路径参数是您要检索的模型中属性的名称,因此您应该使用 [=14] 而不是 path: 'doctor' =] 因为您将其用作约会模型中的属性名称。 这同样适用于您在 .find 中的查询,您正在查询 'user' 属性,但您的约会模型中有 _userID

所以,你有两个选择:

  1. _userID_doctorID改成userdoctor,这样应该更好;
  2. 或者将控制器中的 userdoctor 更改为 _userID_doctorID;

如果您遵循第一个选项,您的代码现在应该类似于:

预约模式:

const mongoose = require('mongoose');
       
const Appointment = mongoose.Schema({
    date: {
        type: Date,
    },
    time: {
        type: Date
    },
    user: {
        type: mongoose.Types.ObjectId,
        ref: 'User'
    },
    doctor: {
        type: mongoose.Types.ObjectId,
        ref: 'Doctor'
    }
})
        
const Appoitment = mongoose.model('Appoitment', Appointment);
module.exports = { Appoitment };

约会控制器:

router.get("/appointment/:id", async (req, res) => {
    try {
        const appointment = await Appointment.find({
            user: req.params.id,
        })
            .populate({
                path: "doctor",
                select: "_id name",
            });
        res.send({
            status: 200,
            message: "SuccessFull",
            Appointments: appointment,
        });
    } catch (error) {
        res.send({
            status: 400,
            message: `Error: ${error}`,
        });
    }
});