猫鼬独特:真的不行 [英] mongoose unique: true not work
问题描述
为什么 mongoose unique 在这个脚本中根本不起作用
why mongoose unique not work at all in this script
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 会随时随地创建索引.
This happens because you're saving the duplicated document before mongoose
has finished creating the index. Mongoose creates the indexes on the go, after your app has started.
因此,为了确保您的文档仅在创建索引后才会保存,您必须监听模型的 index
事件.例如:
So, to ensure that your document will be saved only after the indexes were created, you have to listen to the index
event of your model. For example:
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
调用将在创建索引后运行.
Now, when you try to save the second document (the duplicated one), your MongoDB will raise an error, because your save
calls will just run after the indexes were created.
这篇关于猫鼬独特:真的不行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!