2013-05-28 31 views
0
Request.findOne({_id: id}).populate("user").exec(function(err, request) { 
    if (!err) { 
     request.user.firstname = firstname; 
     request.date = date; 
     request.save(next); 
    } 

保存后,日期已更改,但用户的名字没有。
型号:MongooseJS - 如何保存文档和参考文档

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

但是为什么不是第一个工作?

回答

2

检查Mongoose documentation on populate的'正在更新Refs'部分。

在示例中,您将看到您仍然必须保存已创建的RequestUser文档。 (在这个例子中,他们先保存用户“吉尔”则回调它们保存“故事”。

在猫鼬,SubDocs保存当父文档保存,但.populate并没有这样做。

2

requestuser是单独集合中的文档,因此它们各自需要自己的save操作。这只是Mongoose的工作方式(和MongoDB一般),因为一次更新操作不会影响多个集合。