为什么在此脚本中猫鼬唯一不起作用
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
谢谢您的帮助。
发生这种情况是因为您要在mongoose完成索引创建之前保存重复的文档。在您的应用启动后,Mongoose可以随时随地创建索引。
mongoose
因此,为确保仅在创建索引后才保存文档,您必须侦听index模型事件。例如:
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调用将在创建索引后立即运行。
save