Например, у меня есть пользовательская схема, и я хочу подтвердить, что имя пользователя уникально, даже если вы пытаетесь сохранить пользователя в базе данных.Может ли схема использовать свою собственную модель для проверки?
...
UserSchema.path('username')
.validate(function (value, respond) {
User.findOne({ username: this.username }) // This isn't valid.
.lean()
.select('_id')
.exec(function (err, user) {
if (err) {
winston.warn('User_username: Error looking for duplicate users');
respond(false);
}
// If a user was returned, then the user is non-unique!
if (user) {
respond(false);
}
respond(true);
});
});
...
var User = mongoose.model('User', UserSchema);
Я знаю, что я мог бы использовать mongoose.model('User').findOne(...)
, но это только кажется немного глупым, там нет лучшего способа сделать это?
Мой пример был упрощен несколько; На самом деле у меня есть два свойства, которые при объединении должны быть уникальными. 'Username' и' accountCode', так что имя пользователя уникально в том же аккаунте. Кроме того, будет ли описанный вами метод «ValidationError»? Или «MongoError»? – Siyfion
Вы можете создавать составные индексы для выполнения нескольких уникальных валидаций полей следующим образом: 'Schema.index ({имя пользователя: 1, accountCode: 1}, {unique: true})' Однако он бросает MongoError, а не a ValidationError – matthewtole
Да, это моя проблема, я уже создал составной индекс на Схеме, но я думаю, что у меня есть преимущество в проверке того, что до сохранения нет дублированной записи. – Siyfion