猫鼬关系

Aye*_*azo 6 database mongoose node.js express

我正在研究Mongodb,我正在使用Mongoose,我想创建一个非常动态的注册过程.我使用Passport管理了注册的第一步,一切正常,我创建了用户,它存在于数据库中.现在我的注册过程将继续,用户必须选择"角色":您是什么类型的用户?有两个选项:"基本"和"高级".Basic只有3个属性,advanced有3个基本属性和其他几个属性.

我需要扩展userSchema或添加基于该角色的新字段,但在一周之后它还没有工作,我尝试了很多NPM像:mongoose-relationshipmongoose-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 }
});
Run Code Online (Sandbox Code Playgroud)

用户已经存在并且他在屏幕上需要选择角色并填充所选的配置文件.

有关信息,我正在使用nodejsexpressjs.

我希望你能提供帮助.谢谢.

Mua*_*ath 3

使用猫鼬模式扩展:

通过 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 }
});
Run Code Online (Sandbox Code Playgroud)

猫鼬模式扩展