2016-04-30 18 views
0
erstellt werden

Mein Mongoose Schema wie folgt aussieht:Mongoose Schema: ein Array von Objekten Erzwingen

var userSchema = mongoose.Schema({ 

    fbid  : String, 
    googleid : String, 
    birthday : String, 
    email  : String, 
    first_name : String, 
    last_name : String, 
    gender  : String, 
    age  : Number, 
    location : String, 
    paid  : { type: Boolean, default: 0 }, 
    lessons: [ 
    { 
     name : { type: String, default: 'foobar1'}, 
     sent : { type: Boolean, default: 0 }, 
     read : { type: Boolean, default: 0 }, 
     activity: { type: Boolean, default: 0 } 
    }, 
    { 
     name : { type: String, default: 'foobar2'}, 
     sent : { type: Boolean, default: 0 }, 
     read : { type: Boolean, default: 0 }, 
     activity: { type: Boolean, default: 0 } 
    }, 
    { 
     name : { type: String, default: 'foobar3'}, 
     sent : { type: Boolean, default: 0 }, 
     read : { type: Boolean, default: 0 }, 
     activity: { type: Boolean, default: 0 } 
    }, 
    { 
     name : { type: String, default: 'foobar4'}, 
     sent : { type: Boolean, default: 0 }, 
     read : { type: Boolean, default: 0 }, 
     activity: { type: Boolean, default: 0 } 
    }, 
    { 
     name : { type: String, default: 'foobar5'}, 
     sent : { type: Boolean, default: 0 }, 
     read : { type: Boolean, default: 0 }, 
     activity: { type: Boolean, default: 0 } 
    }, 
    { 
     name : { type: String, default: 'foobar6'}, 
     sent : { type: Boolean, default: 0 }, 
     read : { type: Boolean, default: 0 }, 
     activity: { type: Boolean, default: 0 } 
    }, 
    { 
     name : { type: String, default: 'foobar7'}, 
     sent : { type: Boolean, default: 0 }, 
     read : { type: Boolean, default: 0 }, 
     activity: { type: Boolean, default: 0 } 
    }, 
    { 
     name : { type: String, default: 'foobar8'}, 
     sent : { type: Boolean, default: 0 }, 
     read : { type: Boolean, default: 0 }, 
     activity: { type: Boolean, default: 0 } 
    } 
    ] 

}); 

Wenn new User() tun, ist alles richtig außer für die lessons Array erstellt, die als leeres Array zurückgibt anstatt die verschachtelten Objekte mit ihren Standardwerten zu erstellen.

Es ist möglich, diese Objekte zu machen, wenn Sie new User() tun, aber ich möchte, dass dies im Modell selbst auftritt, da alle Benutzer die gleichen lessons und die gleichen Anfangswerte haben.

Wie kann ich das erreichen?

+0

sollte es 'neues mongoose.Schema (...)' sein –

Antwort

1

Folgenden Link wären hilfreich für die Einstellung Standardwert für verschachtelte Array in Mungo Schema hinzuzufügen.

set default values to mongoose arrays in node js

Sie mögen dies tun könnte:

var lessonSchema = Schema({ 
    name: { type: String }, 
    sent: { type: Boolean }, 
    read: { type: Boolean }, 
    activity: { type: Boolean } 
}); 

var userSchema = Schema({ 
    fbid: { type: String }, 
    googleid: { type: String }, 
    birthday: { type: String }, 
    email: { type: String }, 
    first_name: { type: String }, 
    last_name: { type: String }, 
    gender: { type: String }, 
    age: { type: Number }, 
    location: { type: String }, 
    paid: { type: Boolean, default: 0 }, 
    lessons: [lessonSchema] 
}); 

userSchema.pre("save", function (next) { 
    if (!this.lessons || this.lessons.length == 0) { 
     this.lessons = []; 
     this.lessons.push({ 
      "name": "football 1", 
      "sent": true, 
      "read": true, 
      "activity": true 
     }) 

     this.lessons.push({ 
      "name": "football 2", 
      "sent": true, 
      "read": true, 
      "activity": true 
     }) 

     this.lessons.push({ 
      "name": "football 3", 
      "sent": true, 
      "read": true, 
      "activity": true 
     }) 

     this.lessons.push({ 
      "name": "football 3", 
      "sent": true, 
      "read": true, 
      "activity": true 
     }) 
    } 
    next(); 
}); 
0

Set Standardwert in Ihrem Schema-Deklaration:

var defaultLessons = [ 
    { 
     name : 'foobar1', 
     sent : 0 , 
     read : 0 , 
     activity: 0 
    , 
    { 
     name : 'foobar2', 
     sent : 0 , 
     read : 0 , 
     activity: 0 
    , 
    { 
     name : 'foobar3', 
     sent : 0 , 
     read : 0 , 
     activity: 0 
    , 
    { 
     name : 'foobar4', 
     sent : 0 , 
     read : 0 , 
     activity: 0 
    , 
    { 
     name : 'foobar5', 
     sent : 0 , 
     read : 0 , 
     activity: 0 
    , 
    { 
     name : 'foobar6', 
     sent : 0 , 
     read : 0 , 
     activity: 0 
    , 
    { 
     name : 'foobar7', 
     sent : 0 , 
     read : 0 , 
     activity: 0 
    , 
    { 
     name : 'foobar8', 
     sent : 0 , 
     read : 0 , 
     activity: 0 
    } 
    ]; 

var userSchema = new mongoose.Schema({ 
    ... 
    lessons: { type: [], default: defaultLessons} 
}); 

Eine andere Struktur Art und Weise ist sub docs zu verwenden:

var lessonSchema = new mongoose.Schema({                   
    name : { type: String, default: 'foobar'}, 
    sent : { type: Boolean, default: 0 }, 
    read : { type: Boolean, default: 0 }, 
    activity: { type: Boolean, default: 0 } 
}); 

var defaultLessons = [ 
    { 
     name : 'foobar1', 
    }, 
    { 
     name : 'foobar2', 
    }, 
    { 
     name : 'foobar3', 
    }, 
    { 
     name : 'foobar4', 
    }, 
    { 
     name : 'foobar5', 
    }, 
    { 
     name : 'foobar6', 
    }, 
    { 
     name : 'foobar7', 
    }, 
    { 
     name : 'foobar8', 
    } 
    ]; 

var userSchema = new mongoose.Schema({ 
    ... 
    lessons: { type: [lessonSchema], default: defaultLessons} 
}); 

Allerdings funktioniert oben nicht in Mungo 4+, ich habe Mungo 3,8 versucht ok. Siehe .

Verwandte Themen