避免在Mongoose数组上重复输入

mar*_*cci 9 mongoose mongodb

我使用mongoose有很多关系,看起来像这样.

TeamSchema = new Schema 
    name : String
    players: [{ type: ObjectId, ref: 'Player' }]
Run Code Online (Sandbox Code Playgroud)

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

当我做:

team.players.push(player)
team.save()
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Joh*_*yHK 27

使用$addToSet更新运算符,如下所示:

Team.update({_id: team._id}, {$addToSet: {players: player}})
Run Code Online (Sandbox Code Playgroud)

假设player是玩家的ObjectId,它只会被添加到团队的players数组中(如果它尚未存在).


Ped*_*ner 8

只需使用addToSet方法:

team.players.addToSet(player)
team.save()
Run Code Online (Sandbox Code Playgroud)