在猫鼬中创建多对多关系,填充不是函数
Creating many to many relationship in mongoose, populate is not a function
我在创建员工时尝试与 mongoose 建立多对多关系。但是,当我调用 .post
:
时出现以下错误
TypeError: Employee.create(...).populate is not a function
我的 .get
也使用了 .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);
});
});
这是状态 class:
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);
这是员工 class:
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);
似乎.post
也似乎抛出500 错误,但我不确定两者是否相关。
上面的代码是否有明显的错误,或者我应该在其他地方寻找错误?
在 mongoose 中无法在创建对象后进行填充。
见 Docs
您在 post 请求中做错的第一件事是您从不保存状态,如果保存了状态,那么您将 status._id 保存在 statuses.Then 中,您执行 findById并找到 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);
})
})
})
我在创建员工时尝试与 mongoose 建立多对多关系。但是,当我调用 .post
:
TypeError: Employee.create(...).populate is not a function
我的 .get
也使用了 .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);
});
});
这是状态 class:
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);
这是员工 class:
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);
似乎.post
也似乎抛出500 错误,但我不确定两者是否相关。
上面的代码是否有明显的错误,或者我应该在其他地方寻找错误?
在 mongoose 中无法在创建对象后进行填充。 见 Docs
您在 post 请求中做错的第一件事是您从不保存状态,如果保存了状态,那么您将 status._id 保存在 statuses.Then 中,您执行 findById并找到 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);
})
})
})