2013-05-12 5 views
23

Sto giocando con la guida rapida per la mangusta.In che modo `mangusta` gestisce l'aggiunta di documenti che hanno FIELDS che sono __NOT__ parte dello schema?

http://mongoosejs.com/docs/index.html

ho pensato che sarebbe lanciare un errore quando ho salvato un documento con un campo non definiti nello schema. Invece, ha creato un nuovo documento nella raccolta ma senza campo. (Nota: Mi rendo conto MongoDB è di per sé "schema-less" in modo che ogni documento in una raccolta può essere completamente diversi l'uno dall'altro.)

due domande

  1. documenti Come mongoose maniglia aggiungendo che hanno campi che sono NON parte dello schema? Sembra che li ignori e, se nessuno dei campi mappa, creerà un documento vuoto solo con un ObjectId.
  2. E come si ottiene mongoose per avvisare se un campo specifico di un documento non è stato aggiunto anche se il documento è stato salvato correttamente?

(la domanda è - credo - abbastanza semplice, quindi non ho aggiungere il codice, ma ho sicuramente farò, se qualcuno richiede.)

Grazie.

+1

Mi rendo conto che la tua domanda è taggata Mongoose, ma una cosa che ho trovato davvero utile e minimalista è il pacchetto [monk] di Guille (https://github.com/LearnBoost/monk). Lo uso avvolto in [Q] di Kris Kowal (https://github.com/kriskowal/q) per creare un metodo molto promettente per accedere a MongoDB. –

+0

Ehi, adoro i suggerimenti. Ottimi suggerimenti anche. Ho appena dato un'occhiata ad entrambi i pacchetti ed entrambi valgono chiaramente la pena di giocare e di conoscerlo. Ho passato un bel po 'di tempo ad assicurarmi che la mangusta fosse un buon posto su cui costruire, e poi arrivò alla conclusione, sì! È davvero fantastico E Guille è uno degli autori sia di mangusta che di monaco. –

risposta

24

D: In che modo Mangusta gestisce l'aggiunta di documenti con campi che NON fanno parte dello schema?

L'opzione rigorosa, (abilitato per default), assicura che i valori passati al nostro costruttore di modello che non sono stati specificati nel nostro schema non vengono salvati sul db. - mongoose docs

D: Come si ottiene mangusta per avvertirvi se un campo specifico di un documento non è stato aggiunto anche se il documento salvato con successo?

L'opzione rigorosa può anche essere impostato per "buttare" che causerà errori da produrre invece di cadere i dati non validi. - mongoose docs

... ma se assolutamente bisogno di salvare le chiavi che non sono nello schema, allora dovete gestire da soli.Due approcci mi viene in mente sono:

1. Per salvare le chiavi che non sono nello schema, è possibile impostare strict false su un specific model instance o su un specific update. Quindi, è necessario scrivere una convalida secondo cui (a) i valori nel documento sono conformi ai propri standard e (b) il documento salvato nel database corrisponde al documento inviato.

2. Si potrebbe vedere se il Mixed schema type potesse servire le vostre esigenze, invece di disattivare le convalide che vengono con strict. (Scorri verso il basso fino a "note di utilizzo" su quel collegamento, poiché il collegamento alla documentazione "mista" sembra interrotto per il momento.)

+0

Super. Hai individuato perfettamente la soluzione. È facile perdersi nei documenti e perdere le cose. Grazie! Per ora, voglio rigoroso; i tuoi suggerimenti per le situazioni in futuro, quando non posso, sono intelligente. Bella risposta. –

+0

Quando uso entry.save ({strict: 'throw'}, function (err, entry, numAffected) { console.log (err); console.log ('///////////err callback ////////// '); console.log (numAffected); }); – Davet

1

Mongoose consente di aggiungere middleware "validatore" e "pre" che svolgono funzioni utili. Ad esempio, è possibile specificare l'attributo required nello schema per indicare che è necessario impostare una proprietà specifica. È inoltre possibile specificare un valore validator che è possibile creare per generare un errore se la proprietà associata non soddisfa le specifiche. È inoltre possibile impostare un mangusta "pre" validator che esamina il documento e genera un errore se trova campi esterni allo schema. Avendo il tuo middleware chiama next() (o meno), puoi decidere se procedere al salvataggio del documento (o meno).

Questo question/response su stackoverflow può aiutare a capire se un oggetto ha o meno una proprietà.

+0

Anche questo è utile ed è una potenziale soluzione. Ho accettato la risposta di cui sopra perché ha individuato il metodo esatto. Altrimenti, hai ragione, il middleware ha molte possibilità di gestire le situazioni in modo ordinato. Ho intenzione di giocare con 'required' to night. –

+0

@ cathy.sasaki: np! Ultimamente, ho trovato la combinazione di Angular, Monk e Q per essere molto utile, fornendomi esattamente la CRUD e l'interfaccia utente facile da gestire che voglio. –

+0

Neato! Ho appena guardato Angular da Google. Avevo sentito gente che ne parlava, ma era occupato con nodo/backbone e così via. Sì, ho bisogno di metterlo sul mio programma di apprendimento e usarlo. Grazie per i suggerimenti su questo framework/moduli! –

Problemi correlati