14

我有一个使用猫鼬的多对多关系,看起来像这样。

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

我想要做的是确保一个玩家不会在团队中出现两次。

当我做:

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

如果我之前已经添加了玩家,我会在团队文档中看到两次玩家 ID。是否可以设置某种 mongo/mongoose 标志,以便保存方法抛出异常,或者不添加播放器。我知道我可以手动检查,但我更喜欢更简单的解决方案。

谢谢!

4

2 回答 2

34

像这样使用$addToSet更新运算符:

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

假设是玩家的 ObjectId,如果它不存在player,它只会被添加到团队的数组中。players

于 2012-11-15T20:19:46.327 回答
9

只需使用addToSet方法:

team.players.addToSet(player)
team.save()
于 2016-11-25T12:19:49.090 回答