在mongoose中创建多对多的关系,填充不是一个功能

时间:2017-02-09 09:34:59

标签: javascript mongodb mongoose mongoose-schema mongoose-populate

在创建员工时,我正在尝试与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错误,但我不确定这两者是否相关。 上面的代码中是否有明显的错误,或者我是否应该在其他地方查找错误?

2 个答案:

答案 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