首页 > 解决方案 > 如何使用 Node 和 MongoDB(Mongoose)在两个不同的模型中实现 findById

问题描述

我的系统中有两种不同的模型,如下所示:

StudentModel.js

 const mongoose = require("mongoose");

const studentSchema = new mongoose.Schema({
  email: {
    type: String,
    required: true,
  },
  role: {
    type: String,
    required: true,
  },
});

const Student = mongoose.model("student", studentSchema);

module.exports = Student;

用户模型.js

const mongoose = require("mongoose");

const userSchema = new mongoose.Schema({
  email: {
    type: String,
    required: true,
  },
  passwordHashed: {
    type: String,
    required: true,
  },
  role: {
    type: String,
    required: true,
  },
});

const User = mongoose.model("user", userSchema);

module.exports = User;

我想要的是在这两个模型中找到 findById,我该怎么做?目前,这是我拥有的代码,但它仅在用户模型之一中实现。

jwt.verify(token, "secret", async (err, decodedToken) => {
      if (err) {
        console.log(err.message);
      } else {
        let user = await User.findById(decodedToken.user);
        const { email, role } = user;
        res.json({ email, role });
      }
    }

如何在两个模型中实现 findById?提前致谢。

标签: node.jsmongodbmongoose

解决方案


您必须将 StudentModel _id 保存在 User 模型中,这将在您创建 User 模型时完成,您必须在您的 req.body 中传递 studenModel _id

const mongoose = require("mongoose");
const userSchema = new mongoose.Schema({
  email: {
    type: String,
    required: true,
  },
  passwordHashed: {
    type: String,
    required: true,
  },
  role: {
    type: String,
    required: true,
  },
  student: {
      type: mongoose.Schema.ObjectId,
      ref: 'student',
      required: true
    }
});
const User = mongoose.model("user", userSchema);
module.exports = User; 

现在使用填充来获取学生数据

let user = await User.findById(req.params.id).populate({
    path: 'student',
    select: 'email role'
  });

推荐阅读