Aye*_*azo 6 database mongoose node.js express
我正在研究Mongodb,我正在使用Mongoose,我想创建一个非常动态的注册过程.我使用Passport管理了注册的第一步,一切正常,我创建了用户,它存在于数据库中.现在我的注册过程将继续,用户必须选择"角色":您是什么类型的用户?有两个选项:"基本"和"高级".Basic只有3个属性,advanced有3个基本属性和其他几个属性.
我需要扩展userSchema或添加基于该角色的新字段,但在一周之后它还没有工作,我尝试了很多NPM像:mongoose-relationship或mongoose-schema-extend.
这基本上就是我所拥有的:
userSchema = new Schema({
   id           : Number,
   email        : { type: String, required: true },
   role         : { type: String, required: true },
   profile      : { ... } // Profile fields are different for each role.
});
// profile 1
basicSchema = new Schema({
   info1        : { type: String, required: true },
   info2        : { type: String, required: true },
   info3        : { type: String, required: true }
});
// profile 2
advancedSchema = new Schema({
   info1        : { type: String, required: true },
   info2        : { type: String, required: true },
   info3        : { type: String, required: true },
   info4        : { type: String, required: true },
   info5        : { type: String, required: true },
   info6        : { type: String, required: true }
});
用户已经存在并且他在屏幕上需要选择角色并填充所选的配置文件.
有关信息,我正在使用nodejs和expressjs.
我希望你能提供帮助.谢谢.
使用猫鼬模式扩展:
通过 npm 安装:$ npm install mongoose-schema-extend
使用您的代码的示例:
var mongoose = require('mongoose'),
    extend = require('mongoose-schema-extend');
var Schema = mongoose.Schema;
var userSchema = new Schema({
   id           : Number,
   email        : { type: String, required: true },
   role         : { type: String, required: true },
},{ collection : 'users' });
//profile 1
var basicSchema = userSchema.extend({
   info1        : { type: String, required: true },
   info2        : { type: String, required: true },
   info3        : { type: String, required: true }
});
//profile 2
var advancedSchema = userSchema.extend({
   info1        : { type: String, required: true },
   info2        : { type: String, required: true },
   info3        : { type: String, required: true },
   info4        : { type: String, required: true },
   info5        : { type: String, required: true },
   info6        : { type: String, required: true }
});