什么是为saas建模mongoose / mongoDB数据库的最佳方法

时间:2017-12-27 00:19:35

标签: node.js mongodb angular mongoose saas

我正在尝试为Saas应用程序建模,其中我将使用这些服务的不同公司。我对这种服务的mongoose数据库建模的最佳方式感到有些困惑。

所以模型就像

Company
  Name
  Users
    ->Roles (Admin,editor etc)
  Projects

这种应用程序建模的最佳方法是什么?

我应该为用户,项目等创建不同的模型,并将公司唯一ID附加到该公司内的所有用户或项目。同时引用公司模型中的这些用户或项目。像

这样的东西
//User is used as a separate model and is only referenced in company schema
var userSchema = new Schema({  
    Name  : String,
    Role: {
        type: String,
        enum: ['admin','reader', 'editor'],
        default: 'reader'
    },
    Company : { type: Schema.ObjectId, ref: 'Company' }
});
mongoose.model('User', userSchema);

var companySchema = new Schema({  
    Name  : String,
    Users : [
         { type: Schema.ObjectId, ref: 'User' }
    ],
    Projects : [
         { type: Schema.ObjectId, ref: 'Project' }
    ]
});

mongoose.model('Company', companySchema);

或者

仅引用公司架构中的用户和项目架构,而无需单独的模型

//userSchema is used as a child in company schema
var userSchema = new Schema({  
    Name  : String,
    Role: {
        type: String,
        enum: ['admin','reader', 'editor'],
        default: 'reader'
    },
});

var companySchema = new Schema({  
    Name  : String,
    Users : [
        userSchema 
    ],
    Projects : [
        projectSchema 
    ]
});

mongoose.model('Company', companySchema);

从长远来看,如果需要,可以轻松查询子文档,内存分配,公共API暴露,这是最好的方法吗?

如果它是第二种方式那么我需要有id或那些子文档吗?我可以使用唯一的公司ID进行查询,然后在文档中找到相关公司后找到所需的东西吗?

1 个答案:

答案 0 :(得分:0)

没关系,从帖子系列https://www.mongodb.com/blog/post/6-rules-of-thumb-for-mongodb-schema-design-part-1

中找到了非常详细的答案