2012-11-15 82 views
8

我有使用貓鼬的多對多關係,看起來像這樣。避免Mongoose數組上的重複條目

TeamSchema = new Schema 
    name : String 
    players: [{ type: ObjectId, ref: 'Player' }] 

我想要做的是確保一個球員不會在球隊中出現兩次。

當我這樣做:

team.players.push(player) 
team.save() 

如果我之前已經加入的球員,我看到球員ID對球隊DOC兩次。是否有某種可以設置的mongo/mongoose標誌,以便save方法拋出異常,或者不添加播放器。我知道我可以手動進行檢查,但我更喜歡更簡單的解決方案。

謝謝!

回答

20

使用$addToSet更新操作,像這樣:

Team.update({_id: team._id}, {$addToSet: {players: player}}) 

假設player是玩家的的ObjectId,也只會是如果它不存在加入到團隊中的players陣列。

5

只需使用addToSet方法:

team.players.addToSet(player) 
team.save()