你有正確的想法,即使它看起來像你腹脹您的用戶架構它是不是具有一對多的關係表從長遠來看,更容易維護,這裏有一個例子您的用戶架構可能的樣子:
var ROLES = ['user', 'mod', 'admin'];
var UserSchema = new Schema({
email: {type: String},
address: {
address: {type: String},
city: {type: String},
zipCode: {type: Number},
country: {type: String},
},
role: {type: String, enum: ROLES},
})
在這裏你可以看到我嵌入地址字段作爲嵌套文檔。我也使用了Mongoose的枚舉屬性,它說只有ROLES數組中的角色是允許的。如果您嘗試保存不在列表中的角色,它將返回一個錯誤。
但是,如果你的意思是,每個角色也應該有一個類型的我肯定會提出這個到一個單獨的模式是這樣的:
var ROLES = ['user', 'mod', 'admin'];
var RoleSchema = new Schema({
name: {type: String, enum: ROLES},
type: {type: String},
});
並將其鏈接到您的UserSchema:
var UserSchema = new Schema({
...
role: {type: Schema.Types.ObjectId, ref: 'Role'},
})
現在,當您保存新用戶時,您需要找到相應的角色對象並將該對象的ID保存到用戶,這裏是一個示例:
Role.findOne({name: 'user', type: 'userType'}, function(err, role) {
var user = new User({
email: '[email protected]',
address: {
address: '500 Wall St',
city: 'Seattle',
zipCode: 98121,
country: 'USA',
},
role: role._id,
})
})
希望幫助,讓我知道如果你有任何其他問題。
非常感謝您的解釋。我想我會像在你的例子中那樣創建RoleSchema。 – Markus 2014-09-13 18:00:36