1

我正尝试在创建员工时与猫鼬建立多对多关系。然而,我发现了以下错误,当我打电话.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); 
     }); 
    }); 

这是状态类:

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); 

看来.post似乎也抛出500错误,但我不确定这两者是否有关系。 在上面的代码中是否有明显的错误,或者我应该在其他地方寻找错误吗?

回答

1

您在发布请求中做错的第一件事是您永远不会保存状态,如果状态已保存,那么您将state._id保存在状态中。然后执行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); 
    }) 
    }) 
}) 
0

猫鼬在创建对象后无法填充。 请参阅Docs

+0

我与创建对象的'.exec',这我没有打电话,直到之后的'.populate' – Snackoverflow

+0

是的,但事实是,你可以”这样做。查看文档..只有当对象被创建,并且你想更新或保存,那么你可以填充它们。 – maki10

+1

我已经更新了我的'.post'它不再抛出错误,但它似乎没有链接数据库中的'状态'。当我看着Robomongo时,状态只是显示为员工对象中的空白元素。对我而言,我似乎和文档描述一样。我在正确的轨道上吗? – Snackoverflow