具有特定值的Mongoose模式属性

时间:2012-11-08 07:07:36

标签: javascript node.js mongodb express mongoose

这是我的代码:

var userSchema = new mongoose.Schema({
  email: String,
  password: String,
  role: Something
});

我的目标是定义角色属性以具有特定值('admin','member','guest'等等),实现这一目标的更好方法是什么?提前谢谢!

2 个答案:

答案 0 :(得分:30)

你可以做枚举。

var userSchema = new mongoose.Schema({
  // ...
  , role: { type: String, enum: ['admin', 'guest'] }
}

var user = new User({
 // ...
 , role: 'admin'
});

答案 1 :(得分:0)

我知道没有一种方法可以为角色提供特定的值,但是您可能希望根据主对象类型创建多个对象类型,每个类型都有自己的角色(以及您想要区分的任何其他内容)。例如......

var userSchema = function userSchema() {};
userSchema.prototype = {
  email: String,
  password: String,
  role: undefined
}
var member = function member() {};
member.prototype = new userSchema();
member.prototype.role = 'member';

var notSupposedToBeUsed = new userSchema();
var billTheMember = new member();
console.log(notSupposedToBeUsed.role); // undefined
console.log(billTheMember.role); // member

另一种可能性是让userSchema具有一个构造函数,可以轻松地选择其中一个内置值。一个例子......

var userSchema = function userSchema(role) {
    this.role = this.role[role];
    // Gets the value in userSchema.role based off of the parameter
};
userSchema.prototype = {
  email: String,
  password: String,
  role: { admin: 'admin', member: 'member', guest: 'guest' }
}
var a = new userSchema('admin');
var b = new userSchema('blah');
console.log(a.role); // 'admin'
console.log(b.role); // undefined

更多:http://pivotallabs.com/users/pjaros/blog/articles/1368-javascript-constructors-prototypes-and-the-new-keyword