MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Ikhtisar Validasi Skema MongoDB

Semua orang tahu bahwa MongoDB tidak memiliki skema, lalu mengapa diperlukan untuk melakukan validasi skema? Sangat mudah dan cepat untuk mengembangkan aplikasi dengan perilaku tanpa skema MongoDB dan menggunakannya sebagai bukti konsep. Tetapi begitu aplikasi beralih ke produksi dan menjadi stabil dan matang, tidak perlu sering mengubah skema dan juga tidak disarankan. Saat ini, sangat penting untuk menerapkan beberapa validasi skema di database Anda untuk menghindari data yang tidak diinginkan dimasukkan yang dapat merusak aplikasi Anda. Ini menjadi jauh lebih penting ketika data dimasukkan dari berbagai sumber dalam database yang sama.

Validasi skema memungkinkan Anda untuk menentukan struktur dokumen tertentu di setiap koleksi. Jika ada yang mencoba memasukkan beberapa dokumen yang tidak cocok dengan skema yang ditentukan, MongoDB dapat menolak jenis operasi ini atau memberikan peringatan sesuai dengan jenis tindakan validasi.

MongoDB menyediakan dua cara untuk memvalidasi skema Anda, Validasi dokumen, dan validasi skema JSON. Validasi Skema JSON adalah versi validasi dokumen yang diperluas, jadi mari kita mulai dengan validasi dokumen.

Validasi Dokumen

Sebagian besar pengembang yang telah bekerja dengan database relasional mengetahui pentingnya prediktabilitas model atau skema data. Oleh karena itu, MongoDB memperkenalkan validasi dokumen dari versi 3.2. Mari kita lihat cara menambahkan aturan validasi di koleksi MongoDB.

Misalkan, Anda memiliki kumpulan pengguna yang memiliki jenis dokumen berikut.

{
    "name": "Alex",
    "email": "[email protected]",
    "mobile": "123-456-7890"
} 

Dan berikut adalah validasi yang ingin kami periksa saat menambahkan dokumen baru di koleksi pengguna:

  • nama, kolom email wajib diisi
  • nomor ponsel harus mengikuti struktur tertentu:xxx-xxx-xxxx

Untuk menambahkan validasi ini, kita dapat menggunakan konstruksi “validator” saat membuat koleksi baru. Jalankan kueri berikut di Mongo shell,

db.createCollection("users", {
  validator: {
        $and: [
            {
                "name": {$type: "string", $exists: true}
            },
            {
                "mobile": {$type: "string", $regex: /^[0-9]{3}-[0-9]{3}-[0-9]{4}$/}
            },
            {
                "email": {$type: "string", $exists: true}
            }
        ]
    }
})

Anda akan melihat output berikut:

{ "ok" : 1 }

Sekarang, jika Anda mencoba menambahkan dokumen baru tanpa mengikuti aturan validasi maka mongo akan membuat kesalahan validasi. Coba jalankan kueri penyisipan berikut.

Kueri:1

db.users.insert({
    "name": "akash"
})

Keluaran:

WriteResult({
    "nInserted" : 0,
    "writeError" : {
        "code" : 121,
        "errmsg" : "Document failed validation"
    }
})

Kueri:2

db.users.insert({
    "name": "akash",
    "email": "[email protected]",
    "mobile": "123-456-7890"
})

Keluaran:

WriteResult({ "nInserted" : 1 })

Namun, ada beberapa batasan dengan pendekatan validasi dokumen seperti seseorang dapat menambahkan sejumlah pasangan nilai kunci baru ke dokumen dan memasukkannya ke dalam koleksi. Ini tidak dapat dicegah dengan validasi dokumen. Perhatikan contoh berikut,

db.users.insert({
    "name": "akash",
    "email": "[email protected]",
    "mobile": "123-456-7890",
    "gender": "Male"
})

Keluaran:

WriteResult({ "nInserted" : 1 })

Selain itu, validasi dokumen hanya memeriksa nilainya. Misalkan, jika Anda mencoba menambahkan dokumen dengan "nmae"(salah ketik) sebagai kunci alih-alih "nama", mongo akan menganggapnya sebagai bidang baru dan dokumen akan dimasukkan ke dalam DB. Hal-hal ini harus dihindari ketika Anda bekerja dengan database produksi. Untuk mendukung semua ini, MongoDB memperkenalkan operator "jsonSchema" dengan konstruksi "validator" dari versi 3.6. Mari kita lihat cara menambahkan aturan validasi yang sama seperti di atas dan menghindari penambahan kolom baru/salah eja.

Beberapa Sembilan Menjadi DBA MongoDB - Membawa MongoDB ke ProduksiPelajari tentang apa yang perlu Anda ketahui untuk menerapkan, memantau, mengelola, dan menskalakan MongoDBUnduh secara Gratis

Validasi jsonSchema

Jalankan perintah berikut di mongo shell untuk menambahkan aturan validasi menggunakan operator "jsonSchema".

db.runCommand(
  {
    "collMod": "users_temp",
    "validator": {
      "$jsonSchema": {
        "bsonType": "object",
        "additionalProperties": false,
        "required": [
          "name",
          "email"
        ],
        "properties": {
          "_id": {},
          "name": {
            "bsonType": "string"
          },
          "email": {
            "bsonType": "string"
          },
          "mobile": {
            "bsonType": "string",
            "pattern": "^[0-9]{3}-[0-9]{3}-[0-9]{4}$"
          }
        }
      }
    }
  })

Mari kita lihat sekarang, apa yang terjadi ketika kita mencoba memasukkan dokumen berikut.

db.users.insert({
    "name": "akash",
    "email": "[email protected]",
    "mobile": "123-456-7890",
    "gender": "Male"
})

Ini akan menimbulkan kesalahan karena kami belum mendefinisikan bidang gender di "jsonSchema".

WriteResult({
    "nInserted" : 0,
    "writeError" : {
        "code" : 121,
        "errmsg" : "Document failed validation"
    }
})

Dengan cara yang sama, jika Anda memiliki kesalahan ketik pada nama bidang apa pun, mongo akan memunculkan kesalahan yang sama.

Skema yang didefinisikan di atas sama dengan yang kami gunakan dalam validasi dokumen. Selain itu, kami menambahkan bidang "Properti tambahan" untuk menghindari kesalahan ketik pada nama bidang dan penambahan bidang baru dalam dokumen. Ini akan memungkinkan hanya bidang yang ditentukan di bawah bidang "properti". Berikut adalah ikhtisar dari beberapa properti yang dapat kita gunakan di bawah operator "jsonSchema".

  • bsonType:array | objek | string | boolean | nomor | nol
  • wajib:larik semua bidang wajib
  • enum:larik yang hanya berisi nilai yang mungkin untuk bidang apa pun
  • minimum:nilai minimum bidang
  • maksimum:nilai maksimum bidang
  • minLength:panjang minimum bidang
  • mixLength:panjang maksimum bidang
  • properti:kumpulan skema JSON yang valid
  • properti tambahan:menghentikan kami untuk menambahkan bidang lain selain yang disebutkan di bidang properti
  • judul:judul untuk bidang apa pun.
  • deskripsi:deskripsi singkat untuk bidang apa pun.

Selain validasi skema, operator "jsonSchema" juga dapat digunakan dalam tahap menemukan dan mencocokkan di dalam alur agregasi.

Kesimpulan

Validasi Dokumen/Skema tidak diperlukan atau diinginkan dalam semua situasi, tetapi secara umum, menambahkannya ke dalam basis data merupakan praktik yang baik karena akan meningkatkan produktivitas pengembang yang menangani basis data Anda. Mereka akan tahu respons seperti apa yang diharapkan dari database karena tidak akan ada data acak.

Dalam artikel ini, kita mempelajari tentang pentingnya validasi skema di MongoDB dan cara menambahkan validasi di tingkat dokumen menggunakan validasi dokumen dan operator "jsonSchema".


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Pembaruan luwak tanpa panggilan balik

  2. Kumpulan Mesin &Profil Cloud untuk MongoDB

  3. Manajemen AWS:Cara Menghemat 30% Biaya Hosting MongoDB Anda

  4. Kueri Mongo menggunakan mongoid di aplikasi Rails menyebabkan kesalahan batas waktu kursor

  5. Menyimpan beberapa file kecil (di bawah 1 MB) dengan MongoDB di NodeJS TANPA GridFS