2014-12-08 85 views
3

爲什麼貓鼬唯一沒有在這個腳本貓鼬獨特:真不行

var child_process = require('child_process'); 
    // Load required packages 
    child_process.exec("mongo test --eval 'db.users.drop();'", function(err){ 
    var mongoose = require('mongoose'); 

    console.log(mongoose.version); 
    mongoose.connect('mongodb://localhost:27017/test'); 
    // Define our user schema 

    var json = {}; 
    json.phone = { type: String, required: true, unique: true}; 
    var UserSchema = new mongoose.Schema(json); 
    var Model = mongoose.model('user', UserSchema); 

    var jp = new Model({ phone: "123456"}); 
    mongoose.connection.on('open', function(){ 
    console.log(jp); 
    jp.save(function(err){ 
     console.log(err); 
     var jp2 = new Model({ phone: "123456"}); 
     console.log(jp2); 
     jp2.save(function(err){ 
     console.log(err); 
     process.exit(); 
     }); 
    }) 
    }); 
}); 

我很困惑在所有的工作,結果是一樣

3.8.20 
{ phone: '123456', _id: 54856cceb5b40f7a88fcc2af } 
null 
{ phone: '123456', _id: 54856cceb5b40f7a88fcc2b0 } 
null 

謝謝您的幫助。

回答

10

發生這種情況是因爲您在mongoose完成創建索引之前要保存重複的文檔。在您的應用程序啓動後,Mongoose會隨時隨地創建索引。

因此,爲確保您的文檔僅在索引創建後才能保存,您必須聽取模型的index事件。例如:

Model.on('index', function (error) { 
    console.log(jp); 
    jp.save(function(err){ 
    console.log(err); 
    var jp2 = new Model({ phone: "123456"}); 
    console.log(jp2); 
    jp2.save(function(err){ 
     console.log(err); 
     process.exit(); 
    }); 
    }) 
}); 

現在,當您嘗試保存第二個文件(複製的一個),你的MongoDB會產生一個錯誤,因爲創建索引後,您save電話將只運行。

+1

謝謝,這是我想要的。 – SetupX 2014-12-10 07:37:39