猫鼬关系

时间:2014-04-29 17:08:46

标签: database node.js express mongoose

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

我需要扩展userSchema或根据该角色添加新字段,但在一周后它还没有工作,我尝试了很多NPM,如: mongoose-关系 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 的信息。

我希望你能提供帮助。感谢。

2 个答案:

答案 0 :(得分:3)

使用mongoose-schema-extend:

通过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 }
});

mongoose-schema-extend

答案 1 :(得分:2)

这就是你想要的。 "继承"的概念和歧视性的领域。试一试。我用它并创造奇迹。基本上,您有3种类型的用户:基本,高级和专家。每个都基于您的核心/基础模型,然后使用您需要的额外属性进行扩展,为每个角色定义一个继承。

这给你带来了很多好处,主要是:mongoose会填充相应的模型,并在派生模型中进行任何验证等。

https://github.com/briankircho/mongoose-schema-extend