我正在开发我在Mongo的第一个数据库。我使用Mongoose来创建模型。我想实现一对多的多重关系。有三种模型:用户,组和角色模型。用户可以属于多个组,并且可以在同一组中拥有多个角色。例如,John属于组1和2.组1中的Juan是管理员,组2是管理员和超级用户。下面我展示了关系模式:
我创建了以下模型:
的usermodel
const roleSchema = new Schema({
name: {type: String, unique: true},
code: {type: String, unique: true},
description: String
}, {
timestamps: {createdAt: 'created_at', updatedAt: 'updated_at', deleteAt: 'delete_at'}
});
const RoleModel=mongoose.model('role', roleSchema);
的RoleModel
const groupSchema = new Schema({
name: {type: String, unique: true}
}, {
timestamps: {createdAt: 'created_at', updatedAt: 'updated_at', deleteAt: 'delete_at'}
});
const GroupSchema = mongoose.model('group', groupSchema);
GroupModel
const groupuserroleSchema = new Schema({
role: {type: Schema.Types.ObjectID, ref: 'role'},
user: {type: Schema.Types.ObjectID, ref: 'user'},
group: {type: Schema.Types.ObjectID, ref: 'group'}
});
const GroupUserRoleModel = mongoose.model('group_user_role', groupuserroleSchema);
GroupUserRoleModel
new MyClass(42)
我的问题是:
我已经看到有关该方法的信息填充在mongoose(Populate)中,但只有两个模型之间存在一个关系 谢谢你的帮助。
答案 0 :(得分:1)
好的,这里的问题是,你想创建一个"关系数据库" -like使用mongodb还是你想建模一个No#34; NoSQL"类数据库?
我看到你想要做什么,重现关系模式。这是一个常见的错误,这里解释了为什么要避免这种情况。使用mongodb,你应该注意一些新的概念,比如一个新的关系(一个到一些,多个到一些)some
代表一个组/一小部分文档的列表(我们可以称之为子文档) )。 mongodb的主要好处是尽可能减少收集。
如果您想要解释子文档在mongoose中的工作方式,请点击链接http://mongoosejs.com/docs/subdocs.html
为了解决你的问题,我想(如果你认为你没有那么多的团体和角色),你应该这样做:
<强>的usermodel 强>
const roleSchema = new Schema({
name: {type: String, unique: true},
code: {type: String, unique: true},
description: String
}, {
timestamps: {createdAt: 'created_at', updatedAt: 'updated_at', deleteAt: 'delete_at'}
});
const groupSchema = new Schema({
name: {type: String, unique: true}
}, {
timestamps: {createdAt: 'created_at', updatedAt: 'updated_at', deleteAt: 'delete_at'}
});
const userSchema = new Schema({
username: {type: String, unique: true},
first_name: String,
middle_name: String,
first_surname: String,
second_surname: String,
email: String,
password: String,
roles: [roleSchema],
groups: [groupSchema]
}, {
timestamps: {createdAt: 'created_at', updatedAt: 'updated_at', deleteAt: 'delete_at'}
});
const UserModel = mongoose.model('user', userSchema);
现在你有一个系列&#39; User&#39;您可以在哪里管理您的用户,他们的群组和他们的角色。
var user = new UserModel({ name: "Odonno", groups: [{ name: 'Admin' }, { name: 'User' }] })
user.save(callback);
拥有模型后,您可以轻松设置组和角色,然后将其保存在数据库中。