Come posso determinare perché un documento MongoDB non riesce a convalidare?


13

Come faccio a determinare perché un inserimento del documento MongoDB non riesce a convalidare? Tutto ciò che ottengo è un errore di scrittura che dice "Convalida del documento non riuscita", il che non è molto utile.

(Ciò accade spesso e vorrei capire come eseguire correttamente il debug di questi, piuttosto che chiedere aiuto con un esempio specifico.)

Risposte:


10

Come in MongoDB 3.2, non ci sono feedback sul motivo per cui la convalida del documento non è riuscita: l'espressione di convalida complessiva attualmente valuta True ("OK") o False ("Convalida del documento non riuscita"). Il comportamento della convalida può essere regolato con le opzioni di configurazione validationAction(errore / avviso) e validationLevel(rigoroso / moderato / spento), ma ciò non fornisce alcun ulteriore contesto per gli errori di convalida.

Se si desidera avere un feedback più dettagliato, l'approccio consigliato sarebbe quello di aggiungere la logica di convalida nell'applicazione anziché fare affidamento esclusivamente sui controlli lato server. Anche con la convalida lato server, molti controlli vengono eseguiti meglio nella logica aziendale dell'applicazione per ridurre al minimo i round trip al server del database e fornire un feedback più reattivo all'utente finale.

Ad esempio, l'input dell'utente per un'app Web (campi obbligatori, formati di campo, ...) deve essere convalidato nel browser prima di essere inviato all'applicazione o tentare di inserire / aggiornare nel database.

Tuttavia, ha senso convalidare a più livelli per garantire la qualità dei dati e alcuni contesti per diagnosticare errori di convalida sarebbero molto utili. Esiste una richiesta di funzionalità aperta pertinente che è possibile guardare / aumentare il voto nel tracker del problema MongoDB: SERVER-20547: esporre il motivo per cui un'operazione non riesce a convalidare il documento .

Per ulteriori informazioni, potresti anche essere interessato alla convalida dei documenti - Parte 1: aggiungere la giusta quantità di controllo sui tuoi documenti . Ciò evidenzia alcuni dei pro e contro generali della convalida dei documenti come in MongoDB 3.2 e include una tabella di riferimento per i risultati basata sulle opzioni di configurazione validationActione validationLevel.


2
Grazie! Immagino che non mi mancasse nulla qui. Effettivamente eseguiamo la maggior parte della nostra validazione nella nostra applicazione, ma lasciamo controlli di basso livello come validatori di MongoDB, principalmente per assicurarci che i nostri ingegneri del software (e io stesso) non creino bug durante lo sviluppo, piuttosto che trovare errori dell'utente nella produzione. Ho votato a favore della JIRA. Saluti!
Jonathan Wheeler,

Il problema è che il formato dello schema è "semi-standard", cioè con le estensioni MongoDB, quindi è ancora difficile scoprire qual è la causa usando i validatori dello schema JSON standard.
Hendy Irawan,

1
@HendyIrawan Sì, ci sono alcune estensioni allo schema JSON per i tipi di dati MongoDB, quindi per la convalida rigorosa sarebbero necessarie ulteriori convalide o trasformazioni client. Ho visto alcuni esempi come mongo-schemerper Node.js, che si basa su AJV (Another JSON Schema Validator) .
Stennie

1

Naturalmente la risposta originale è corretta, gestire la convalida prima di arrivare al db è assolutamente una buona pratica, ma come pratica se è necessario inseguirla come in questo momento, è possibile rimuovere temporaneamente la convalida dallo schema e quindi vedere cosa mostra nella collezione.

Se un campo era richiesto ma risulta mancante, vuoto o deformato almeno restringe la ricerca. Se i dati sembrano corretti, dai un'occhiata alle convalide specificate nello schema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.