2013-08-29 16 views
9

Mi piace la convalida fornita con Mongoose. Stiamo cercando di capire se vogliamo usarlo e sopportare il sovraccarico. Qualcuno sa se fornisce un riferimento alla collezione genitore quando crea uno schema di mangusta, (nello schema figlio, specifica l'id oggetto dell'oggetto padre come un campo), questo significa che ogni volta che provi a salvare il documento esso controlla la raccolta genitore per l'esistenza dell'id oggetto refereneced?La Mongoose convalida effettivamente l'esistenza di un ID oggetto?

risposta

17

lo sto facendo con middleware, eseguire una ricerca dell'elemento sulla validazione:

ExampleSchema = new mongoose.Schema({ 

    parentId: { 
     type: mongoose.Schema.Types.ObjectId, 
     ref: 'Example' 
    } 

}); 

ExampleModel = mongoose.model('Example', ExampleSchema); 

ExampleSchema.path('parentId').validate(function (value, respond) { 

    ExampleModel.findOne({_id: value}, function (err, doc) { 
     if (err || !doc) { 
      respond(false); 
     } else { 
      respond(true); 
     } 
    }); 

}, 'Example non existent'); 
2

No, un campo ObjectId definito nello schema come riferimento a un'altra raccolta non viene verificato come esistente nella raccolta di riferimento su un salvataggio. Potresti farlo nel middleware Mongoose, se necessario.

+0

Ha senso. Stiamo andando con le prestazioni, supponendo che stiamo codificando correttamente e NON inseriremo in un ID oggetto non esistente. Questo naturalmente ha il suo rischio, ma stiamo riscrivendo da java in node per abbinarci al resto della nostra architettura e, si spera, risolviamo alcuni gravi problemi di prestazioni che stavamo avendo. – CargoMeister

10

sto usando mongoose-id-validator. Funziona bene

var mongoose = require('mongoose'); 
var idValidator = require('mongoose-id-validator'); 

var ReferencedModel = new mongoose.Schema({name: String}); 

var MySchema = new mongoose.Schema({ 
    referencedObj : { type: mongoose.Schema.Types.ObjectId, ref: 'ReferencedModel'}, 
    referencedObjArray: [{ type: mongoose.Schema.Types.ObjectId, ref: 'ReferencedModel' }] 
}); 

MySchema.plugin(idValidator); 
+0

Mi piace. Bello e semplice – CargoMeister

1

Si può provare https://www.npmjs.com/package/lackey-mongoose-ref-validator (io sono lo sviluppatore)

Inoltre, impedisce l'eliminazione se si usa il riferimento su un altro documento.

var mongooseRefValidator = require('lackey-mongoose-ref-validator'); 
mongoSchema.plugin(mongooseRefValidator, { 
    onDeleteRestrict: ['tags'] 
}); 

Si tratta di una prima versione, per cui sono attesi alcuni bug. Basta compilare un biglietto se ne trovi uno.

Problemi correlati