保存后重新填充mongoose文档

时间:2014-07-15 23:34:52

标签: mongoose populate

我曾尝试过关于SO的其他问题,但它们都有点过时了。我正在使用Mongoose来保存对文档的更改。我希望能够重新填充我的参考字段。我在Mongoose问题中看到herehere已经添加了类似的内容,但除非我手动“减少”字段,使用模型填充,否则我似乎无法使其工作。然后保存文档。

例如,如果我有一个这样的模式引用另一个集合:

var EmployeeSchema = new Schema({
    Name: {
        type: String
        required: true
    },
    Manager: {
        type: Schema.ObjectId,
        ref: 'Managers'
    }
});

填充的对象看起来像这样:

{
    Name: 'Test Employee',
    Manager: {
        _id: <Some ObjectId>
        Name: 'Test Manager',
        Group: 'HR'
    }
}

如果我更改了管理器的ID值,然后调用employee.save(callback),则返回的数据只有正确的ID,但尚未使用新管理器重新填充Manager字段。如果没有上面描述的所有步骤,有没有办法快速完成这项工作?

1 个答案:

答案 0 :(得分:0)

我认为在您想要更改员工经理的情况下通常会发生的事情是:

  • 加载员工模型。如果您只是打算在不使用现有管理器值的情况下进行更改,则可能不需要在此时填充管理器。请务必使用employee.manager = newManager而不是employee.manager._id = newManagerId进行更改,否则我不确定mongoose是否会正确理解您的更改。
  • 更改内存模型中的管理器。但是,只需保持对此实例的引用,这样您就不必从数据库中重新获取它。
  • 使用新经理ID
  • 保存员工
  • 如果您想对填充的员工(将其发送到浏览器或其他任何内容)做更多事情,只需使用步骤2中的现有参考而不是重新获取。