Как проиндексировать несколько уникальных полей данных в одном документе в Mongoose? - PullRequest
0 голосов
/ 04 июля 2018

В моем пользовательском документе я хочу индивидуально индексировать email и username как уникальные поля, чтобы дубликат никогда не вводился.

Проблема в том, что вся документация, которую я нашел для нескольких уникальных индексов, относится к «Составной индексации», которая, похоже, каким-то образом связывает второй индекс с первым. Я не хочу этого

Все, что я хочу, это для моей регистрации шаг 1 , если пользователь отправляет электронное письмо, которое уже существует для MongoDB, чтобы вернуть ошибку, которая уже существует, и точно такое же для шаг 2 , когда они устанавливают свое имя пользователя.

Так что я хочу, чтобы они были проиндексированы и уникальны друг от друга. Я использую это сейчас, и это как-то связывает 2, что не то, что я хочу:

const UserSchema = new mongoose.Schema({
  email: {
    type: String,
    required: true,
    trim: true
  },
  username: {
    type: String,
    required: false,
    trim: true
  }
})

UserSchema.index({
  email: 1,
  username: 1
}, {
  unique: true
});

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Добавьте unique: true к определению каждого поля в схеме, чтобы создать отдельные уникальные индексы для этих полей:

const UserSchema = new mongoose.Schema({
  email: {
    type: String,
    required: true,
    trim: true,
    unique: true
  },
    username: {
    type: String,
    required: false,
    trim: true,
    unique: true
  }
})

См. Раздел Индексы на этой странице для документации.

0 голосов
/ 04 июля 2018

Mongoose не имеет встроенной проверки уникальных полей. Я рекомендую пакет (с этим вы можете использовать уникальный валидатор в полях email и username): mongoose-unique-validator. Расширьте свой код с помощью:

let uniqueValidator = require('mongoose-unique-validator');

email: {
  type: String,
  required: true,
  trim: true,
  unique: true,
  index: true
},
  username: {
  type: String,
  required: false,
  trim: true,
  unique: true,
  index: true
}

UserSchema.plugin(uniqueValidator, {message: 'is already taken.'});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...