在创建员工时,我正在尝试与mongoose建立多对多的关系。但是,当我调用.post
:
TypeError: Employee.create(...).populate is not a function
我使用.get
的{{1}}不会引发任何错误。这让我想知道为什么.populate
会这样做。
这是我的代码:
.post
这是状态类:
app.route('/api/employees')
.get(function (req, res, next) {
Employee.find()
.populate('statuses')
.exec(function (err, employee) {
if (err) {
return next(err);
}
res.json(employee);
});
})
.post(function (req, res, next) {
Employee.create(req.body)
Employee.findById(req.params._id)
.populate('statuses')
.exec(function (err, employee) {
if (err) {
return next(err);
}
res.json(employee);
});
});
这是员工班:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var statusSchema = new Schema({
name: ['In office', 'Project', 'Fired', 'Resigned', 'Ill']
});
module.exports = mongoose.model('Statuses', statusSchema);
似乎var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var employeeSchema = new Schema({
name: String,
division: ['IT','System','Trainee','Intern'],
statuses: [{type:Schema.Types.ObjectId, ref: 'Statuses'}],
project: Boolean,
comment: {type:String, default:null}
});
module.exports = mongoose.model('Employees', employeeSchema);
似乎也抛出500错误,但我不确定这两者是否相关。
上面的代码中是否有明显的错误,或者我是否应该在其他地方查找错误?
答案 0 :(得分:1)
你在post请求中做错的第一件事就是你永远不会保存状态,如果状态保存,那么你将status._id保存在状态中。然后你找到了bedId并找到了employee._id然后你填充了
以下是一个例子:
Status.create(req.body, (err, status) => {
if (err) console.error(`Error ${err}`)
Employee.create({
name: req.body.name,
comment: req.body.comment,
division: req.body.division,
name: status._id
}, (err, employee) => {
if (err) console.error(`Error ${err}`)
Employee
.findById(employee._id)
.populate('statuses')
.exec((err, employee) => {
if (err) console.error(`Error ${err}`)
// console.log(JSON.stringify(employee))
res.json(employee);
})
})
})
答案 1 :(得分:0)
在创建对象后,无法填充mongoose。 见Docs