我试过在SO上查看其他问题,但它们都有点过时了 . 我正在使用Mongoose来保存对文档的更改 . 我希望能够重新填充我的参考字段 . 我在Mongoose问题中看到here和here已经添加了类似的东西,但我似乎无法让它工作,除非我手动"depopulate"字段,使用模型填充,然后保存文档 .
例如,如果我有一个这样的模式引用另一个集合:
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重新填充 Manager
字段 . 如果没有上面描述的所有步骤,有没有办法快速完成这项工作?
1 回答
我认为在您想要更改员工经理的情况下通常会发生的情况是:
加载员工模型 . 如果您只是打算在不使用现有管理器值的情况下进行更改,则可能不需要在此时填充管理器 . 确保你用
employee.manager = newManager
更改它而不是employee.manager._id = newManagerId
否则我不确定mongoose会正确理解你的变化 .更改内存模型中的管理器 . 但是,只需保持对此实例的引用,这样您就不必从数据库中重新获取它 .
使用新经理ID保存员工
如果您想对填充的员工(将其发送到浏览器或其他)做更多事情,只需使用步骤2中的现有参考而不是重新获取 .