MongoDB的麻烦,是两种方式引用的东西吗?

时间:2016-03-21 12:36:40

标签: node.js mongodb mongoose

所以我有一个用node.js + mongoDB(mongoose)构建的网站。我在设计数据库时遇到了一些麻烦。

我希望有2个登录,一个用于机构,另一个用于专业人员。我是否需要双重引用它们(就像专业人士有一个参考Inst和一个机构有专业的参考)?

例如,如果我想显示所有专业人士的列表,当我在机构登录时是微不足道的,但如果我没有在用户(专业人士)上引用该机构就不那么简单了。哪一个更好?有代码在每个机构中找到用户并获得其机构名称或两者相互引用然后进行填充?

如果我选择两个引用彼此,是否有某种方法可以保证它们两者始终是链接的并且只有单向引用没有被破坏?

代码:

var userSchema = new mongoose.Schema({
    username: String,
    password: String,
    email: String,
    name: String,
    created_at: {type: Date, default: Date.now},
    status : Boolean,
    institution: { type:mongoose.Schema.ObjectId, ref:'Inst' }
});


mongoose.model('User', userSchema);
var User = mongoose.model('User');

var instSchema = new mongoose.Schema(
{
    name : String,
    professional : [{ type:mongoose.Schema.ObjectId, ref:'User'}]
});

mongoose.model('Inst', instSchema);
var Inst = mongoose.model('Inst');

1 个答案:

答案 0 :(得分:0)

如何将instSchema合并到userSchema,如下所示,并使用其他user_type来指明此用户所属的类型,ProfessionalInstitutions。还有一个新的related_user用于存储其他相关的User文档

var userSchema = new mongoose.Schema({
    username: String,
    password: String,
    email: String,
    name: String,
    created_at: {type: Date, default: Date.now},
    status : Boolean,
    user_type: {type: String, enum: ['Prof', 'Inst']},
    related_user: [{ type:mongoose.Schema.ObjectId, ref:'User'}]
});

mongoose.model('User', userSchema);
var User = mongoose.model('User');