2015-06-22 8 views
5

Diciamo che ho uno schema nidificato (invito) in un altro schema (elemento) e quando provo a salvare un oggetto invito, voglio controllare se la proprietà genitore 'abilitata' dallo schema dell'articolo è impostato su true o false prima di consentire alla persona di salvare l'oggetto di invito nell'array di inviti. Ovviamente, this.enabled non funziona perché sta cercando di rimuoverlo da invitationSchema, che non esiste. Come si dovrebbe ottenere la convalida della proprietà 'enabled' sullo schema padre?Ottieni proprietà schema padre per la convalida con Mongoose e MongoDB

Qualche idea? Grazie per qualsiasi aiuto!

var validateType = function(v) { 
    if (v === 'whateverCheck') { 
     return this.enabled || false; <== this doesn't work 
    } else { 
     return true; 
    } 
}; 

var invitationSchema = new Schema({ 
    name: { type: String }, 
    type: { 
     type: String, 
     validate: [validateType, 'error message.'] 
    } 
}); 

var itemSchema = new Schema({ 
    title: { type: String }, 
    description: { type: String }, 
    enabled: {type: Boolean}, <== trying to access this here 
    invitations: { type: [ invitationSchema ] }, 
}); 

var ItemModel = mongoose.model('Item', itemSchema, 'items'); 
var InvitationModel = mongoose.model('Invitation', invitationSchema); 

risposta

1

Il genitore di un documento incorporato è accessibile da un'istanza modello doc incorporato chiamando instance.parent();. Quindi puoi farlo da qualsiasi middleware Mongoose come un validatore o un hook.

Nel tuo caso si può fare:

var validateType = function(v) { 
    if (v === 'whateverCheck') { 
     return this.parent().enabled || false; // <== this does work 
    } else { 
     return true; 
    } 
}; 
Problemi correlati