2015-06-26 2 views
1

Я не понимаю цели таких полей, как unique и required в схемах Mongoose. В случае unique, кажется, что вы должны написать свои собственные методы для запроса MongoDB, чтобы узнать, существует ли это значение. Я полагаю, что с «обязательным» Mongoose просто нужно проверить, было ли это значение передано в конструкторе модели Mongoose. Но с уникальным я не понимаю цели этого.Цель поля isUnique в Mongoose

userSchema = mongoose.Schema({ 

     username: { 
      type: String, 
      unique: true, 
      required: true, 
      validate: [validation.usernameValidator, 'not a valid username'] 
     }, 
     ... 

для того, чтобы подтвердить имя пользователя, я должен создать свою собственную функцию = validation.usernameValidator проверить MongoDB, чтобы увидеть, если имя пользователя уже существует. Итак, в чем смысл isUnique?

+0

да я сделал! «unique» правильный и что я имел в виду – Olegzandr

ответ

2

unique создаст объект MongoDB "unique" index, не позволяя документам с таким же значением, чтобы это свойство существовало в одной коллекции.

Однако, поскольку это принудительно используется базой данных, единственный способ, которым это работает, заключается в сохранении документа и обнаружении ошибки дубликата-ключа, которую MongoDB вернет.

Вы можете проверить эту ошибку следующим образом:

if (err && err.code === 11000) { ...duplicate... } 
+0

ahh, я вижу, поэтому вам все равно нужно запросить MongoDB, чтобы узнать, было ли имя пользователя принято или нет, но MongoDB будет искать в индексе не в документе/коллекции. Первоначально я думал, используя уникальное свойство, что Mongoose/MongoDB позаботится об этом. Но, похоже, из того, что вы говорите, мне еще нужно отправить Mongo запрос. ИМО, над которой нужно испечь? – Olegzandr

+1

@Olegzandr В документации указано, что 'unique' создает уникальный индекс в вашей базе данных, не более того. Хотя я согласен с тем, что можно ожидать, что Mongoose (а не MongoDB) будет обрабатывать нарушения уникальности (хотя это может работать только Mongoose, выполняющий запрос, который вам теперь нужно делать вручную) – robertklep

Смежные вопросы