Bagaimana cara menentukan mengapa dokumen MongoDB gagal validasi?

13

Bagaimana cara menentukan mengapa penyisipan dokumen MongoDB gagal validasi? Yang saya dapatkan hanyalah writeError yang mengatakan "Dokumen gagal validasi", yang tidak terlalu membantu.

(Ini sering terjadi, dan saya ingin memahami cara men-debug ini dengan benar, daripada meminta bantuan dengan contoh tertentu.)

Jonathan Wheeler
sumber

Jawaban:

10

Seperti pada MongoDB 3.2, tidak ada umpan balik tentang alasan validasi dokumen gagal: ekspresi validasi keseluruhan saat ini dievaluasi sebagai Benar ("OK") atau Salah ("Validasi dokumen gagal"). Perilaku validasi dapat disesuaikan dengan opsi konfigurasi validationAction(kesalahan / peringatan) dan validationLevel(ketat / sedang / tidak aktif), tetapi ini tidak memberikan konteks lebih lanjut untuk kegagalan validasi.

Jika Anda ingin memiliki umpan balik yang lebih rinci, pendekatan yang disarankan adalah menambahkan logika validasi ke dalam aplikasi Anda daripada hanya mengandalkan pemeriksaan sisi server. Bahkan dengan validasi sisi-server, banyak pemeriksaan sebaiknya dilakukan dalam logika bisnis aplikasi untuk meminimalkan perjalanan pulang-pergi ke server database dan memberikan umpan balik yang lebih responsif kepada pengguna akhir.

Misalnya, input pengguna untuk aplikasi web (bidang yang diperlukan, format bidang, ...) harus divalidasi di browser sebelum dikirimkan ke aplikasi Anda atau mencoba memasukkan / memperbarui dalam basis data.

Namun, masuk akal untuk memvalidasi di berbagai tingkatan untuk memastikan kualitas data dan beberapa konteks untuk mendiagnosis kegagalan validasi akan sangat berguna. Ada permintaan fitur terbuka yang relevan yang dapat Anda tonton / pilih di pelacak masalah MongoDB: SERVER-20547: Mengungkap alasan mengapa suatu operasi gagal validasi dokumen .

Untuk informasi lebih lanjut, Anda mungkin tertarik dengan Validasi Dokumen - Bagian 1: Menambahkan Jumlah Kontrol yang Tepat pada Dokumen Anda . Ini menyoroti beberapa pro & kontra umum validasi dokumen seperti di MongoDB 3.2, dan termasuk tabel referensi untuk hasil berdasarkan validationActiondan validationLevelopsi konfigurasi.

Stennie
sumber
2
Terima kasih! Sepertinya saya tidak melewatkan apa pun di sini. Kami memang melakukan sebagian besar validasi kami dalam aplikasi kami, tetapi kami meninggalkan pemeriksaan tingkat rendah sebagai validator MongoDB, kebanyakan untuk memastikan insinyur perangkat lunak kami (dan saya sendiri) tidak membuat bug selama pengembangan, daripada untuk menemukan kesalahan pengguna dalam produksi. Saya telah memilih JIRA. Bersulang!
Jonathan Wheeler
Masalahnya adalah format skema adalah "semi-standar" yaitu dengan ekstensi MongoDB, sehingga masih sulit untuk mengetahui apa penyebabnya menggunakan validator JSON Schema standar.
Hendy Irawan
1
@HendyIrawan Ya, ada beberapa ekstensi untuk Skema JSON untuk tipe data MongoDB sehingga diperlukan validasi atau transformasi klien tambahan untuk validasi yang ketat. Saya telah melihat beberapa contoh seperti mongo-schemeruntuk Node.js, yang dibangun berdasarkan AJV (Another JSON Schema Validator) .
Stennie
1

Tentu saja jawaban aslinya benar, menangani validasi sebelum tiba di db adalah praktik terbaik, tetapi sebagai hal praktis jika Anda perlu mengejarnya seperti sekarang, Anda dapat menghapus validasi sementara dari Skema dan kemudian melihat acara apa yang menunjukkan di Koleksi.

Jika suatu bidang diperlukan, tetapi bidang itu muncul tidak ada, kosong, atau salah bentuk, setidaknya itu mempersempit pencarian Anda. Jika data terlihat benar, lihat validasi yang ditentukan dalam Skema.

Serexx
sumber