2017-12-16 6 views
0

Ich versuche, eine Schemaeigenschaft namens grade in meinem Modell auf id eines anderen Modells zu verweisen. Aber es gibt einen Fall, in dem ich es gerne als null behalten würde. Ich habe versucht, die Standard-als null zu halten und versuchte, aber ich bekomme die folgende Fehlermeldung:Mongoose Schema Referenzwert mit Standard null

ValidationError: User validation failed: grade: Cast to Array failed for value "" at path "grade" 

Das folgende ist mein Code:

import * as mongoose from 'mongoose'; 
const userSchema = new mongoose.Schema({ 
    username: String, 
    email: { type: String, unique: true, lowercase: true, trim: true }, 
    password: String, 
    school: { type: String, default: null }, 
    mobile: Number, 
    grade: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Grade', default: null }], 
    role: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Role' }], 
    company: { type: String, default: null }, 
    designation: { type: String, default: null }, 
    active: { type: Number, default: 2 }, 
    url: { type: String, default: null }, 
    admin: { type: Number, default: 0}, 
    created: { type: Date, default: Date.now }, 
    last_active: { type: Date, default: Date.now } 
}); 
const User = mongoose.model('User', userSchema); 
export default User; 

Gibt es eine Art, wie ich die Standardwerte als null halten kann, obwohl Referenzierung es?

Antwort

1

In MongoDB- oder NoSQL-Datenbanken ist es nicht erforderlich, einen Standardwert als NULL zu definieren, da dieser auf Schemaless-Architektur basiert. In relationalen Datenbanken können Sie dies jedoch tun. Solange Sie keinen Wert für das Feld haben, sollte diese Spalte für diese Zeile überhaupt nicht vorhanden sein.

prüft unter jenem Beispiel für 2 Zeilen Ihres Schemas:

{username: "jack", email: "[email protected]", password: "123"} 
{username: "msoliman", email: "[email protected]", password: "123", school: "AB"} 

Sie die erste Zeile bemerken nicht über die Schule überhaupt, das ist genau das gleiche wie Sie in relationaler Datenbank-Schule als NULL speichern.

Ich hoffe, das hilft Ihnen zu verstehen, was ich meine, wenn nicht, bitte hinterlassen Sie einen Kommentar. Wenn es hilft, bitte vergessen Sie nicht, meine Antwort zu bewerten

+0

Ich verstehe Was meinst du. Danke für den Zeiger! Ich habe es geschafft, es zu lösen, aber nicht die Daten von der UI übergeben, so dass es als null gespeichert wurde. Vielen Dank! – JackSlayer94

0

Die NoSQL ist so definiert, wenn die Werte verfügbar sind, so dass es im Schema gespeichert wird, sonst wird es nicht berücksichtigen. Also, wenn Sie Ihre Schlüssel definieren wollen, die haben könnte oder haben keine Werte sie nehmen, wie Sie die Rolle in Ihrem obigen Schema genommen haben sonst erforderlich Sie es als
Standard nehmen können: ‚‘,

school: { type: String, default: '' }