我可以有一个引用自身的猫鼬模型吗?

Can i have a mongoose model that refers itself?

我有一个看起来像这样的模型

    const employeeSchema = new mongoose.Schema({
    empFirstName:{
        type: String,
        reuired: true
    },
    empLastName:{
        type: String,
        reuired: true
    },
    empEmail:{
        type: String,
        reuired: true
    },
    empPassword:{
        type: String,
        reuired: true
    },
    empConfirmPass:{
        type: String,
        reuired: true
    },
    empContactNum:{
        type: Number,
        reuired: true
    },  
    empPosition:{
        type: String,
        reuired: true
    },
    empTeam:{
        type: String,
        reuired: true
    }
});
const Employee = mongoose.model('EMPLOYEE', employeeSchema);

module.exports = Employee;
  1. 我想在员工模型中有另一个名为“导师”的字段,他将再次成为员工(来自员工模型的用户),那么如何让模型引用自己?

我想要这样的东西

    mentor :[{
    type: mongoose.Schema.Types.ObjectId, ref: 'Employee'
  }]

这个有用吗? 正确的做法是什么?

  1. 我还想要一个 teamMembers 字段,它将是员工模型中 0 个或更多员工的数组

我该怎么做?

这行得通。你的问题是正确的:

const employeeSchema = new Schema ({
  mentor: [{ type: Schema.Types.ObjectId, ref: 'Employee' }],
  teamMembers: [{ type: Schema.Types.ObjectId, ref: 'Employee' }],
})

我也添加了一些路线,只是为了让您了解如何使用它。

// add team member to employee
index.post('/addTeamMember', (req, res) => {
  Employee.findById(req.body.employeeId, (err, employee) => {
    if (err) {
      console.log(err);
    } else {
      employee.teamMembers.push(req.body.teamMemberId);
      employee.save((err) => {
        if (err) {
          console.log(err);
        } else {
          res.redirect('/');
        }
      });
    }
  });
});

// add mentor to employee
index.post('/addMentor', (req, res) => {
  Employee.findById(req.body.employeeId, (err, employee) => {
    if (err) {
      console.log(err);
    } else {
      employee.mentor.push(req.body.mentorId);
      employee.save((err) => {
        if (err) {
          console.log(err);
        } else {
          res.redirect('/');
        }
      });
    }
  });
});

您还可以 populate 这些字段:

index.get('/populate', (req, res) => {
  Employee.findById(req.body.employeeId)
    .populate('mentor')
    .populate('teamMembers')
    .exec((err, employee) => {
      if (err) {
        console.log(err);
      } else {
        res.send(employee);
      }
    });
});

还有一些建议:

  1. 不要将您的字段命名为 emFirstNameemLastName 等。这是多余的,因为您已经将模型命名为 Employee。它还会使您的代码更难阅读。而只是使用 firstNamelastName
  2. 我不建议像 'EMPLOYEE' 这样的模型名称使用全部大写,因为这不是 mongoose 模型名称的推荐大小写。他们建议首字母大写,所以 Employee 会更正确。