为什么mongoose唯一在此脚本中根本不起作用
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谢谢你的帮助。
发布于 2014-12-09 21:45:40
这是因为您在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调用将在创建索引之后运行。
https://stackoverflow.com/questions/27354834
复制相似问题