мангуст-унікальний-валідатор
Як використовувати цей плагін:
1) npm install --save mongoose-unique-validator
2) у своїй схемі дотримуйтесь цього посібника:
var mongoose = require('mongoose');
var uniqueValidator = require('mongoose-unique-validator');
exampleSchema.plugin(uniqueValidator);
3) мангустські методи
При використанні таких методів, як findOneAndUpdate
вам потрібно буде передати цей об'єкт конфігурації:
{ runValidators: true, context: 'query' }
ie. User.findOneAndUpdate(
{ email: 'old-email@example.com' },
{ email: 'new-email@example.com' },
{ runValidators: true, context: 'query' },
function(err) {
}
4) додаткові опції
чутливий до регістру
використовуйте параметр uniqueCaseInsensitive у вашій схемі
ie. email: { type: String, index: true, unique: true, required: true, uniqueCaseInsensitive: true }
власні повідомлення про помилки
ie. exampleSchema.plugin(uniqueValidator, { message: 'Error, expected {PATH} to be unique.' });
Тепер ви можете додавати / видаляти унікальну властивість до своїх схем, не турбуючись про перезапуск mongo, скидання баз даних або створення індексів.
Застереження (з документації):
Оскільки ми покладаємося на асинхронні операції, щоб перевірити, чи існує документ у базі даних, можна виконати два запити одночасно, обидва отримують 0, а потім обидва вставляють у MongoDB.
Окрім автоматичного блокування колекції або примусового єдиного підключення, реального рішення немає.
Для більшості наших користувачів це не буде проблемою, але це важливий випадок, про який слід знати.