2017-10-04 4 views
1

So habe ich das folgende Layout für meine App:Cast Mongoose Dokument ähnliches Modell

  1. UserSchema (enthält Benutzername und Passwort)

    var UserSchema = new mongoose.Schema({ 
    firstName: String, 
    lastName: String, 
    email: String, 
    username: String, 
    password: String 
    }, options); 
    UserSchema.plugin(passportLocalMongoose); 
    
    module.exports = mongoose.model("User", UserSchema); 
    
  2. StudentSchema (Scheider() auf Benutzer) mit zusätzlichen Feldern

    var StudentSchema = new mongoose.Schema({ 
    indexNumber: String, 
    courses: [{ 
        id: { 
         type: mongoose.Schema.Types.ObjectId, 
         ref: "Course" 
        }, 
        entryDate: { 
         type: Date, 
         default: Date.now 
        } 
    }] 
    }, options); 
    module.exports = User.discriminator("Student", StudentSchema); 
    
  3. TeacherSchema (Scheider() o n Benutzer) mit zusätzlichen Feldern

    var TeacherSchema = new mongoose.Schema({ 
    degree: String, 
    courses: [{ 
        type: mongoose.Schema.Types.ObjectId, 
        ref: "Course" 
    }] 
    }, options); 
    module.exports = User.discriminator("Teacher", TeacherSchema); 
    

Ich verwende Pass local-Strategie User.register().

router.post("/register", function(req,res) { 
var newUser = new User({ 
    firstName: req.body.firstName, 
    lastName: req.body.lastName, 
    email: req.body.email, 
    username: req.body.username 
}); 
User.register(newUser, req.body.password, function(err, user) { 
    if(err) throw err; 
    passport.authenticate("local")(req, res, function() { 
     req.flash("success", "Welcome " + user.username + "."); 
     res.redirect("/"); 
    }); 
}); 
}); 

aber alles ist unter derselben Sammlung Benutzer in db (wegen Scheidern)

Wie kann ich nach einem Benutzerregister, „zu fördern“, ihn zu Schüler oder Lehrer, so kann ich diese zusätzlichen Felder in seinem Objekt?

Antwort

0

Versuchen Sie __t auf "Lehrer" oder "Student" mit einem update Befehl auf dem Benutzermodell. Ich denke, die Standard-Unterscheidungs ​​Schlüssel ist __t so brauchen Sie so etwas wie:

user.update({$set: {__t: "Student" } }, callback)` 

Dann müssen Sie es mit dem Diskriminator wieder ziehen, um Ihre Felder zu erhalten:

const Student = User.discriminator("Student", StudentSchema); 
Student.findById(id, callback) 
Verwandte Themen