Saya "harus" mungkin mengawali ini dengan satu kesalahpahaman dalam pertanyaan Anda. Faktanya adalah MongoDB berbeda dari RDBMS tradisional karena "tanpa skema" dan Anda sebenarnya tidak perlu "membuat bidang" sama sekali. Jadi ini berbeda dari "skema tabel" di mana Anda tidak dapat melakukan apa pun sampai skema berubah. Namun "Validasi" adalah hal yang berbeda serta fitur "masih" yang relatif baru pada saat penulisan.
Jika Anda ingin "menambahkan aturan validasi" lalu ada metode yang bergantung pada keadaan koleksi saat ini. Dalam kedua kasus tersebut, sebenarnya tidak ada fungsi "tambahkan ke", tetapi tindakannya adalah "mengganti" semua aturan validasi dengan yang baru untuk ditentukan. Baca terus untuk mengetahui aturan cara kerjanya.
Dokumen yang Ada
Di mana koleksi memiliki dokumen yang ada, seperti yang tercantum dalam dokumentasi
Dokumen yang Ada
Anda dapat mengontrol bagaimana MongoDB menangani dokumen yang ada menggunakan validationLevel pilihan.
Secara default, validationLevel ketat dan MongoDB menerapkan aturan validasi untuk semua sisipan dan pembaruan. Menyetel validationLevel hingga menengah menerapkan aturan validasi untuk menyisipkan dan memperbarui dokumen yang ada yang memenuhi kriteria validasi. Dengan sedang level, pembaruan pada dokumen yang ada yang tidak memenuhi kriteria validasi tidak diperiksa validitasnya.
Bagian ini dan contoh berikut pada dasarnya mengatakan bahwa selain opsi pada .createCollection()
Anda juga dapat memodifikasi koleksi yang ada dengan dokumen, tetapi harus "waspada" bahwa dokumen ini mungkin tidak memenuhi aturan yang diperlukan. Karenanya gunakan "sedang" jika Anda tidak yakin aturan akan dipenuhi untuk semua dokumen dalam koleksi.
Untuk menerapkan, Anda menggunakan .runCommand()
metode saat ini untuk mengeluarkan "perintah" yang menetapkan aturan validasi. Yang merupakan "validationLevel" dari bagian di atas.
Karena Anda sudah memiliki aturan, kami dapat menggunakan `.getCollectionInfos() untuk mengambilnya, lalu menambahkan aturan baru dan menerapkan:
let validatior = db.getCollectionInfos({name: "MyTestCollection"})[0].options.validator;
validator.$or.push({ "LastLoginDate": { "$type": "date" } });
db.runCommand({
"collMod": "MyTestCollection",
"validator": validator,
"validationLevel": "moderate"
});
Tentu saja seperti yang disebutkan sebelumnya, bahwa jika Anda yakin semua dokumen memenuhi persyaratan, maka Anda dapat menerapkan "ketat" sebagai default.
Koleksi Kosong
Jika dalam kasus ini koleksi tersebut sebenarnya "kosong" tanpa dokumen sama sekali atau Anda dapat "menjatuhkan" koleksi karena data saat ini tidak penting, maka Anda cukup memvariasikan di atas dan menggunakan .createCollection()
dalam kombinasi dengan .drop()
:
let validatior = db.getCollectionInfos({name: "MyTestCollection"})[0].options.validator;
validator.$or.push({ "LastLoginDate": { "$type": "date" } });
db.getCollection("MyTestCollection").drop();
db.createCollection( "MyTestCollection", { "validator": validator });