mongoose的独特索引不工作

我试图创build一个字段(“event_key”)的mongoose唯一索引,我希望mongodb不保存,如果我尝试创build一个重复的条目。 我看了看文档,似乎我所要做的就是在模式中设置index: {unique: true} ,但似乎无法使其工作。 我已经尝试了几种不同的排列方式,但仍然无法正常工作。

另外, required: true似乎也没有工作,因为即使我没有传入event_key,我也可以保存一个条目。 我可能错过了一些非常愚蠢的东西,想知道是否有人可以帮忙?

架构

 var WistiaAnalyticSchema = new Schema({ event_key: {type: String, required: true, index: {unique: true}}, visitor_key: String, created: {type: Date, default: Date.now}, ip: String, }) 

试图添加到数据库

 WistiaAnalytic.create({event_key: '1402230270487e0.2668362990953028'}, function(err) {}); WistiaAnalytic.create({event_key: '1402229819163e0.4385743956081569'}, function(err) {}); WistiaAnalytic.create({ip: '1402229819163e0.4385743956081569'}, function(err) {}); WistiaAnalytic.create({event_key: '1402229819163e0.4385743956081569'}, function(err) { console.log(err) }); 

Mongoose在后台创build索引,所以您需要延迟create调用,直到索引创build完成。 一种方法是使用模型的'index'事件:

 WistiaAnalytic.on('index', function(err) { WistiaAnalytic.create({event_key: '1402230270487e0.2668362990953028'}, function(err) {}); WistiaAnalytic.create({event_key: '1402229819163e0.4385743956081569'}, function(err) {}); WistiaAnalytic.create({ip: '1402229819163e0.4385743956081569'}, function(err) {}); WistiaAnalytic.create({event_key: '1402229819163e0.4385743956081569'}, function(err) { console.log(err) }); });