Request.findOne({_id: id}).populate("user").exec(function(err, request) {
if (!err) {
request.user.firstname = firstname;
request.date = date;
request.save(next);
}
保存后,日期已更改,但用户的名字未更改 型号:
var Request = new Schema({
user: {
type: ObjectId,
ref: 'User',
required: true
},
date: {
type: Date,
default: Date.now()
},
我仍然可以通过
来做到这一点 request.user.save(function(err){
if(!err)
request.save(next)
});
但为什么第一个不起作用?
答案 0 :(得分:2)
request
和user
是单独集合中的文档,因此它们都需要自己的save
操作。这就是Mongoose的工作方式(以及一般的MongoDB),因为没有更新操作一次影响多个集合。
答案 1 :(得分:2)
检查Mongoose documentation on populate的“正在更新参考”部分。
在示例中,您将看到仍然必须同时保存您创建的Request
和User
文档。 (在示例中,他们首先保存用户'guille'然后在回调中保存'故事'。)
在Mongoose中,SubDocs保存父文档保存但.populate
不执行此操作。