2013-05-28 43 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一般),因爲一次更新操作不會影響多個集合。