2013-08-29 4 views
9

Ich mag die Validierung, die mit Mongoose kommt. Wir versuchen herauszufinden, ob wir es verwenden und den Overhead in Kauf nehmen wollen. Wer weiß, ob beim Erstellen eines Mungoschemas ein Verweis auf die übergeordnete Sammlung angegeben wird (im untergeordneten Schema geben Sie die Objekt-ID des übergeordneten Objekts als Feld an), bedeutet dies dann, dass Sie jedes Mal versuchen, das Dokument zu speichern Überprüft die übergeordnete Sammlung auf das Vorhandensein der referenced Objekt-ID?Validiert Mongoose tatsächlich das Vorhandensein einer Objekt-ID?

Antwort

17

Ich tue es mit Middleware, eine Suche des Elements auf die Validierung durchführen:

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

Nein, ein ObjectId-Feld, das in Ihrem Schema als Verweis auf eine andere Sammlung definiert ist, wird in der referenzierten Sammlung bei einem Speichervorgang nicht als vorhanden markiert. Sie können es bei Bedarf in der Midgoware von Mongoose machen.

+0

Sinn macht. Wir gehen mit der Leistung fort, vorausgesetzt, wir codieren richtig und würden NICHT in eine Nicht-Existenz-Objekt-ID eingeben. Das hat natürlich sein eigenes Risiko, aber wir schreiben von Java in Node um, um mit dem Rest unserer Architektur übereinzustimmen und hoffentlich einige ernsthafte Leistungsprobleme zu lösen, die wir hatten. – CargoMeister

10

ich mongoose-id-validator bin mit. Funktioniert gut

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

Ich mag das. Schön und einfach. – CargoMeister

1

Sie können versuchen, https://www.npmjs.com/package/lackey-mongoose-ref-validator (Ich bin der Entwickler)

Es verhindert auch, Löschung, wenn die Referenz auf ein anderes Dokument verwendet wird.

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

Es ist eine frühe Version, so dass einige Fehler erwartet werden. Füllen Sie einfach ein Ticket aus, wenn Sie eines finden.

Verwandte Themen