我使用的是 Monggose 4.8.1。我有一个简单的架构:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var Organisation = new mongoose.Schema({
name: {
type: String,
required: [true, 'Organisation name must be provided'],
unique: [true, 'Organisation name must be unique']
},
createdBy: {
type: String,
ref: 'User'
},
createdOn: {
type: Date,
"default": Date.now
},
availableUntil: {
type: Date
}
});
mongoose.model('Organisation', Organisation);
我已将电子邮件 [电子邮件受保护] 保存在文档中。
现在我想再次尝试保存它,并首先使用
validateAsync
检查其是否有效。所以我预计会收到错误,因为电子邮件不是唯一的。
var organisation = new Organisation({
name: '[email protected]'
});
var validResult = organisation.validateSync();
console.log('validResult is ', validResult);
但 validResult 始终是
undefined
...
编辑
我向我的架构添加了一个额外的属性:
eggs: {
type: Number,
min: [6, 'Too few eggs'],
max: 12
}
然后尝试保存
eggs: 3
,这产生了错误。奇怪的是,猫鼬验证似乎不会检查值是否唯一,即使在模式中设置时也是如此......
对于此类验证,您可以使用
path
和 validate
遵循此过程。
在架构中
var OrganisationSchema = new mongoose.Schema({
name: {
type: String,
required: [true, 'Organisation name must be provided']
}
//....
});
OrganisationSchema.path('name').validate(function(value, done){
var self = this;
if(!self.isNew){
return done(true);
}else{
//mongoose.models['Organisation'] or self.model('Organisation')
mongoose.models['Organisation'].count({name: value}, function(err, count){
if(err){
return done(err);
}
return done(!count)
});
}
}, "This email already exists" );
mongoose.model('Organisation', OrganisationSchema);
马克。
您能否验证 mongodb 是否有您保存的模型的记录:
db.organisations.find()
?
看起来如果您有
undefined
值,则意味着文档已按照 validateSync()
的文档通过了验证步骤:
var err = doc.validateSync();
if ( err ){
handleError( err );
} else {
// validation passed
}
请检查您的 mongodb 连接字符串是否包含数据库名称。另外,您还可以检查您的 mongodb 数据库。如果它使用“test”命名集合,则删除该集合并让它创建新的集合。 这为我解决了问题。 谢谢