在猫鼬中创建多对多关系,填充不是函数

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