我正在尝试在mongoose中为字段创建一个唯一索引(" event_key"),如果我尝试创建重复条目,我希望mongodb不能保存。我查看了文档,似乎我需要做的就是在架构中设置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)
});
答案 0 :(得分:5)
Mongoose在后台创建索引,因此您需要延迟create
调用,直到索引创建完成。一种方法是使用模型的'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)
});
});