พังพอน - ตัวตรวจสอบที่ไม่ซ้ำกัน
วิธีใช้ปลั๊กอินนี้:
1) การติดตั้ง npm - บันทึก 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 วางฐานข้อมูลหรือสร้างดัชนี
ข้อควรระวัง (จากเอกสาร):
เนื่องจากเราใช้การดำเนินการ async ในการตรวจสอบว่ามีเอกสารอยู่ในฐานข้อมูลหรือไม่จึงเป็นไปได้ที่แบบสอบถามสองรายการจะดำเนินการพร้อมกันทั้งคู่จะได้รับ 0 กลับจากนั้นทั้งคู่จึงแทรกลงใน MongoDB
นอกเหนือจากการล็อกคอลเลกชันโดยอัตโนมัติหรือบังคับให้มีการเชื่อมต่อเพียงครั้งเดียวแล้วยังไม่มีวิธีแก้ปัญหาที่แท้จริง
สำหรับผู้ใช้ส่วนใหญ่ของเราสิ่งนี้จะไม่เป็นปัญหา แต่เป็นกรณีที่ต้องระวัง