防止重复的mongoDB条目

时间:2018-05-18 03:27:46

标签: mongodb mongoose

我有一个带有mongoose模式的mongoDB:

const newsSchema = new Schema({
   serverid: Number,
   resetid: Number,
   newsid: Number,
   timestamp: Number,
   type: Number,
   win: Number,
   attacker_num: Number,
   attacker_name: String,
   defender_num: Number,
   defender_name: String,
   result1: Number,
   result2: Number,
   a_tag: String,
   d_tag: String,
   killhit: Number
});

以下是我插入到mongoDB中的CSV api的样子:

9,672,22697434,1408587629,5,1,351,LaFing at SoF,9,ReDflag,10,0,SoL,LaF,0
9,672,22697435,1408587629,5,1,377,Commorragh,9,ReDflag,10,0,PDM,LaF,0
9,672,22697436,1408587629,5,1,589,The IX Kiss,9,ReDflag,10,0,SoL,LaF,0

字段#3与api是唯一的,它永远不会重复。在我的架构中,它被称为newsid。如果我的脚本是从源更新数据库并且它尝试插入包含数据库中已有的新闻标识的另一行,是否有办法防止这种情况发生?

1 个答案:

答案 0 :(得分:0)

unique key constraint可以完全按照您的意愿行事。

可以使用架构字段选项在mongoose中设置唯一键:

const s = new Schema({newsid: {type: Number, unique: true}});

index方法:

Schema.path('newsid').index({unique: true});

如果尝试创建已包含该密钥条目的文档,则会引发错误:

  

注意:违反约束会在保存时从MongoDB返回E11000错误,而不是Mongoose验证错误。