我可以有一个引用自身的猫鼬模型吗?
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;
- 我想在员工模型中有另一个名为“导师”的字段,他将再次成为员工(来自员工模型的用户),那么如何让模型引用自己?
我想要这样的东西
mentor :[{
type: mongoose.Schema.Types.ObjectId, ref: 'Employee'
}]
这个有用吗?
正确的做法是什么?
- 我还想要一个 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);
}
});
});
还有一些建议:
- 不要将您的字段命名为
emFirstName
、emLastName
等。这是多余的,因为您已经将模型命名为 Employee。它还会使您的代码更难阅读。而只是使用 firstName
、lastName
等
- 我不建议像
'EMPLOYEE'
这样的模型名称使用全部大写,因为这不是 mongoose 模型名称的推荐大小写。他们建议首字母大写,所以 Employee
会更正确。
我有一个看起来像这样的模型
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;
- 我想在员工模型中有另一个名为“导师”的字段,他将再次成为员工(来自员工模型的用户),那么如何让模型引用自己?
我想要这样的东西
mentor :[{
type: mongoose.Schema.Types.ObjectId, ref: 'Employee'
}]
这个有用吗? 正确的做法是什么?
- 我还想要一个 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);
}
});
});
还有一些建议:
- 不要将您的字段命名为
emFirstName
、emLastName
等。这是多余的,因为您已经将模型命名为 Employee。它还会使您的代码更难阅读。而只是使用firstName
、lastName
等 - 我不建议像
'EMPLOYEE'
这样的模型名称使用全部大写,因为这不是 mongoose 模型名称的推荐大小写。他们建议首字母大写,所以Employee
会更正确。