2014-02-28 128 views
0

我有型號象下面這樣:如何在創建父文檔時自動創建引用的子文檔?

var GameSchema = new Schema({ 
    players: [{type: Schema.Types.ObjectId, ref: 'Player'}], 
}); 

var PlayerSchema = new Schema({ 
    name: { 
     type: String, 
     required: true 
    } 
}); 
mongoose.model('Player', PlayerSchema); 
mongoose.model('Game', GameSchema); 

這裏是我的代碼:

var p1 = new Player({name: 'abc'}); 
var p2 = new Player({name: 'def'}); 
var agame = new Game({players:[p1,p2]}); 
agame.save(); 

我試圖做的是在數據庫中創建新的遊戲的時候,在P1,P2播放器還應該被創建。我的代碼不起作用,p1,p2沒有保存。我怎樣才能做到這一點?

回答

2

players是一個ObjectIds數組,因此您需要傳遞的p1p2而不是整個對象。一個新模型的_id字段在new期間填充,因此它立即可用,但仍需要在所有三個字段上撥打save

var p1 = new Player({name: 'abc'}); 
var p2 = new Player({name: 'def'}); 
var agame = new Game({players: [p1._id, p2._id]}); 
p1.save(); 
p2.save(); 
agame.save(); 
2

這需要您手動完成。首先保存玩家並獲得他們的對象ID。推入引用的父玩家陣列。 下一步是保存父。

0

在我的情況下,我也必須手動執行此操作。因爲它是一個網絡應用程序,然後在我的父母控制器它有類似於

.post((req, res) => { 
    let parent = req.body; 
    if(parent && parent.childrenArray){ 
     let ids = []; 
     parent.childrenArray.forEach((children)=>{ 
      let c = new Children(children); 
      c.save(); 
      ids.push(c._id); 
     }) 
     parent.childrenArray = ids; 
     req.body = parent; 
    } 

    // create parent 
})