2012-05-19 11 views
12

Das Beispiel hierWie kann ich in MongoDB die Typüberprüfung durchführen?

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

Stellt den folgenden Code

var story1 = new Story({ 
     title: "A man who cooked Nintendo" 
    , _creator: aaron._id 
    }); 

_creator oben definiert ist als

_creator : { type: Schema.ObjectId, ref: 'Person' } 

folgt Wenn ich den Code auf die folgende

var story1 = new Story({ 
     title: "A man who cooked Nintendo" 
    , _creator: {name: 'test'} 
    }); 
ändern

Es scheint glücklich, die Daten in MongoDB einzufügen.

{ "title" : "A man who cooked Nintendo", "_creator" : { "name" : "test" }, "_id" : ObjectId("4fb7a55315c5f2de07000002"), "fans" : [ ] } 

Wie würde ich den Fehler vor dem Einfügen abfangen? Ich möchte überprüfen, dass es nicht nur eine ObjectId ist, sondern auch, dass es einer gültigen Person entspricht.

Antwort

20

fortzusetzen, was vorgeschlagen @JohnnyHK, hier ist eine Komplettlösung (_creator unter der Annahme ist ein Verweis auf eine numerische ID).

Wenn Sie überprüfen möchten, ob der Wert ein gültiger ObjectId

ist
function isObjectId(n) { 
    return mongoose.Types.ObjectId.isValid(n); 
} 

validate: [Validator, 'meine Fehlertyp']

_creator : { type: Schema.ObjectId, ref: 'Person', validate: isObjectId } 
+3

dies gibt 'TypeError: Objektfunktion ObjectId (Schlüssel, Optionen) {SchemaType.call (this, Schlüssel, Optionen, 'ObjectID'); } hat keine Methode ‚isValid'' – Tom

+6

Ich glaube, sie es geändert haben: ' mongoose.Types.ObjectId.isValid() ' – herbyme

+0

Aktualisiert dank @herbyme –

1

Sie können dem _creator-Feld des Schemas eine Validierung hinzufügen, wie beschrieben unter here.

_creator : { type: Schema.ObjectId, ref: 'Person', validate: ... } 
6

Die Methode isValid existiert nicht (mehr?), Ihre beste Wette ist ein einfacher regulärer Ausdruck, wie zur Verfügung gestellt here

+4

ich sie habe es geändert glauben: 'mongoose.Types.ObjectId.isValid()' – herbyme

Verwandte Themen