Bir MongoDB belgesinin neden doğrulamada başarısız olduğunu nasıl belirleyebilirim?


14

Bir MongoDB belge ekinin neden doğrulamada başarısız olduğunu nasıl belirleyebilirim? Geri aldığım tek şey, "Belge başarısız doğrulama doğrulanmadı" yazan bir writeError.

(Bu sık sık olur ve belirli bir örnekle ilgili yardım istemek yerine bunları nasıl doğru şekilde hata ayıklayacağımı anlamak isterim.)

Yanıtlar:


11

MongoDB 3.2'de olduğu gibi, belge doğrulamasının başarısız olmasının nedeni hakkında herhangi bir geri bildirim yoktur: genel doğrulama ifadesi şu anda Doğru ("Tamam") veya Yanlış ("Belge başarısız doğrulama") olarak değerlendirilmektedir. Doğrulama davranışı validationAction(hata / uyar) ve validationLevel(katı / orta / kapalı) yapılandırma seçenekleriyle ayarlanabilir, ancak bu doğrulama hataları için başka bir bağlam sağlamaz.

Daha ayrıntılı geri bildirim almak istiyorsanız, önerilen yaklaşım, yalnızca sunucu tarafı denetimlerine güvenmek yerine uygulamanıza doğrulama mantığı eklemek olacaktır. Sunucu tarafı doğrulamasında bile, veritabanı sunucusuna gidiş-dönüşleri en aza indirmek ve son kullanıcıya daha duyarlı geri bildirim sağlamak için uygulama iş mantığında birçok denetim en iyi şekilde yapılır.

Örneğin, bir web uygulaması için kullanıcı girişi (zorunlu alanlar, alan biçimleri, ...) uygulamanıza gönderilmeden veya veritabanına ekleme / güncelleme girişiminde bulunulmadan önce tarayıcıda doğrulanmalıdır.

Bununla birlikte, veri kalitesini sağlamak için birden fazla seviyede doğrulamak mantıklıdır ve doğrulama hatalarını teşhis etmek için bazı bağlamlar çok yararlı olacaktır. MongoDB sorun izleyicide izleyebileceğiniz / oy verebileceğiniz ilgili bir açık özellik isteği var: SERVER-20547: Bir işlemin belge doğrulamasında başarısız olmasının nedenini ortaya çıkarın .

Daha fazla bilgi için ayrıca Belge Doğrulama - Bölüm 1: Belgeleriniz Üzerinde Doğru Kontrol Miktarını Ekleme ilginizi çekebilir . Bu, MongoDB 3.2'deki gibi belge doğrulamanın bazı genel artılarını ve eksilerini vurgular ve sonuca validationActionve validationLevelyapılandırma seçeneklerine dayalı bir referans tablosu içerir .


2
Teşekkürler! Sanırım burada hiçbir şey kaçırmadım. Uygulamamızdaki doğrulamalarımızın çoğunu yapıyoruz, ancak çoğunlukla yazılım mühendislerimizin (ve kendimin) geliştirme sırasında üretim hatalarını bulmak yerine hata oluşturmadığından emin olmak için MongoDB doğrulayıcıları olarak düşük seviyeli kontroller bırakıyoruz. JIRA'ya oy verdim. Şerefe!
Jonathan Wheeler

Sorun şema biçimi "yarı standart" yani MongoDB uzantıları ile, bu yüzden standart JSON Schema doğrulayıcıları kullanarak nedenini bulmak hala zor.
Hendy Irawan

1
@HendyIrawan Evet, MongoDB veri türleri için JSON Şeması için birkaç uzantı vardır, bu nedenle katı doğrulama için ek istemci doğrulaması veya dönüşümü gerekir. AJV (Another JSON Schema Validator)mongo-schemer üzerine kurulu Node.js gibi birkaç örnek gördüm .
Stennie

1

Tabii ki orijinal cevap doğrudur, db'ye ulaşmadan önce doğrulamayı ele almak kesinlikle en iyi uygulamadır, ancak pratik bir konu olarak, şu anda olduğu gibi takip etmeniz gerekiyorsa, şemadan doğrulamayı geçici olarak kaldırabilir ve ardından ne gösterildiğini görebilirsiniz. Koleksiyonda.

Bir alan gerekiyorsa ancak en azından eksik, boş veya biçimsiz görünüyorsa aramanızı daraltır. Veriler doğru görünüyorsa, Şema'da belirtilen doğrulamalara bakın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.