将mongoose文档转换为其他类似的模型

所以我有我的应用程序的以下布局:

  1. UserSchema(包含用户名和密码)

    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(鉴别者()在用户)与额外的领域

     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(鉴别者()在用户)与额外的领域

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

我正在使用护照本地策略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("/"); }); }); }); 

现在所有这些都在同一个数据库收集用户 (由于歧视)

我如何在用户注册之后将他“推介”给学生或老师,以便我可以在他的对象中增加这些额外的领域?

尝试使用User模型上的update命令将__t设置为“Teacher”或“Student”。 我认为默认鉴别键是__t所以你需要像这样的东西:

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

然后,您需要再次使用Discriminator来获取您的字段:

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