2013-08-02 31 views
1

我肯定會錯過這裏明顯的東西。我的理解是,下面的代碼應該拋出11000重複鍵錯誤,但它只是將兩個用戶添加到數據庫中,並且不會引發任何錯誤。任何人有任何想法如何使電子郵件獨特? db版本v2.4.5。不能讓貓鼬/ mongoDB扔11000(重複錯誤)

var mongoose = require('mongoose') 
, Schema = mongoose.Schema; 

mongoose.connect("mongodb://localhost/db"); 

var User = mongoose.model('User', new Schema({ 
    email: {type: String, index: true, unique: true} 
})); 

new User({ 
    email: "[email protected]" 
}).save(function(err,user){ 
    console.log(err); 
}); 

new User({ 
    email: "[email protected]" 
}).save(function(err,user){ 
    console.log(err); 
}); 

編輯

我似乎得到它要去蒙戈命令行工作,並鍵入:

db.users.ensureIndex({email:1},{unique:true}); 

節點腳本則如預期,並引發了正常工作錯誤。不過,我不知道爲什麼這不是通過貓鼬的工作。貓鼬調試的輸出是:

Mongoose: users.ensureIndex({ email: 1 }) { safe: undefined, background: true, unique: true } 
Mongoose: users.insert({ __v: 0, _id: ObjectId("51fb961445cf690000000001"), email: '[email protected]' }) {} 
Mongoose: users.insert({ __v: 0, _id: ObjectId("51fb961445cf690000000002"), email: '[email protected]' }) {} 
Err=null 
Err=null 

我注意到,如果我手動執行它,輸出中的ensureIndex行會失敗。

+0

原來是一些因素。在上面的例子中,如果我在確保索引和添加用戶之間留有1秒的間隔,它將按預期工作。另一部分是確保集合已經沒有任何重複。 –

回答

0

我的猜測是你的索引沒有粘住,你後來修正了這個語法。

db.users.getIndexes() 

用它來驗證是否有對下一次的集合索引。