2015-01-08 12 views
6

Sto provando ad avere un documento nidificato "opzionale" in uno dei miei modelli. Ecco uno schema di campionamentoProprietà nested opzionale di Mongoose: verificare la presenza di null/undefined?

var ThingSchema = mongoose.Schema({ 
    name: String, 
    info: { 
     'date' : { type: Date }, 
     'code' : { type: String }, 
     'details' : { type: Object } 
    } 
}) 
var Thing = mongoose.model('Thing', ThingSchema); 

In questo caso, voglio che la proprietà "info" per essere possibilmente null (non richiesto), e dovrà logica dell'applicazione che controlla se le informazioni è nullo/indefinito.

Sfortunatamente, anche se la proprietà 'info' non è definita nel documento in mongo, mangusta restituisce ancora un oggetto per il campo 'informazioni' all'interno del modello recuperato.

Ad esempio, quando si esegue questo codice, l'oggetto 'informazioni' viene popolato con un oggetto (vuoto).

var thingOne = new Thing({ 
    name: "First Thing" 
}) 

thingOne.save(function(err, savedThing) { 
    if (savedThing.info) { 
     //This runs, even though the 'info' property 
     //of the document in mongo is undefined 
     console.log("Has info!"); 
    } 
    else console.log("No info!"); 
}) 

ho cercato di definire ThingSchema come la seguente

var ThingSchema = mongoose.Schema({ 
    name: String, 
    info: { 
    type: { 
     'date' : { type: Date }, 
     'code' : { type: String }, 
     'details' : { type: Object } 
    }, 
    required: false 

    } 
}) 

Il che mi permette di avere un non definito "info" proprietà recuperata dal database, ma facendo questo mi permette di rompere lo schema "informazioni" e aggiungi proprietà casuali come

savedThing.info.somePropertyThatDoesNotExistInTheSchema = "this shouldn't be here"; 

Che verrà quindi mantenuto nel database. Inoltre, se la proprietà "info" contiene ulteriori documenti nidificati, l'aggiornamento non contrassegna il modello di Thing come sporco, il che significa che devo contrassegnarlo manualmente come modificato (tramite thing.markModified (percorso))

C'è un modo per realizzare ciò che sto cercando di fare? Ci sono delle buone pratiche per questo? Sto semplicemente usando schemi di mangimi in modo completamente errato?

ho bisogno di uno

  1. recuperare una proprietà "info" nullo per lo schema Thing
  2. avere qualche modo per verificare se la proprietà "info" è in realtà nulla a Mongo, anche se mangusta conferisce un valore quando viene recuperato.
+0

Cosa succede se si utilizza il primo schema e si verifica con hasOwnProperty se l'articolo restituito contiene "informazioni"? Questo non significa che restituisce null, ma almeno puoi verificare se ci sono più informazioni. Se questa non è un'opzione, ti prego di dirmi di più in merito alla ricerca di null/undefined, così posso trovare un altro modo. –

risposta

0

Mongoose trasmetterà qualsiasi documento restituito allo schema utilizzato per definire il modello.

Per quanto riguarda i percorsi arbitrari che vengono mantenuti nel database, è possibile utilizzare strict per generare un errore anziché rilasciarlo in modo invisibile all'utente (operazione che dovrebbe essere eseguita per impostazione predefinita).

Problemi correlati