我对NoSQL的做法很新,所以请原谅我,如果我只是想这个完全错误(我觉得我是)。
我的应用程序包含用户和组织,用户必须拥有并属于具有成员或所有者角色的组织。
目前在我的用户架构中我有:
orgs:[{type:Schema.Types.ObjectId,ref:'Org'}]
在我的组织架构中我有:
成员:[{type:Schema.Types.ObjectId,ref:'User'}]
但我也希望附上会员或所有者的角色。
这是我应该在实际参考中添加的东西,如:
成员:[{type:Schema.Types.ObjectId,ref:'User',role:String}]
或该角色应该在架构的其他位置?处理这种情况的正确方法是什么,或者采用不同的方式对此进行图式化更合适?
一旦我为此正确设置了架构,有一个如何使用这个roled ref创建一些用户/组织的示例会很有帮助。
答案 0 :(得分:2)
你可以通过对你所拥有的东西进行一些小改动来做到这一点。我以相同的方式将消息存储在应用程序中(文本和发件人)。
这是你能做的:
members: [{
role: {
type: String
},
user: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}
}],
然后,当您想要向组织添加一个或多个成员时(假设您已经单独创建了一个组织和一个用户):
function addNewMember(org_id, user_id, role) {
var member = {role: role, user: user_id};
Organization.findByIdAndUpdate(org_id, {"$push": {"members":member}}, function(err,org) {
...
});)
// you can use the $each clause to add a whole array of members at the same time too
// like so:
// {"$push": {"members":
// {
// "$each": [memberarray]
// }}}
}
当你想找到一个包含它的成员的组织时,你可以这样做:
Organization.findById(org_id)
.populate('members.user')
.exec(callbackfunction);
如果您确实需要复制本组织,请仔细考虑 - >每个成员的成员关系也是成员 - >组织。如果这确实很重要,在成功将用户添加到组织后,在回调中您可以执行第二次查询以更新用户的orgs字段,就像上面一样。