当前位置: 首页 > 知识库问答 >
问题:

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

夏元明
2023-03-14

我正在尝试为一个Saas应用程序建模,在这个应用程序中,我将让不同的公司使用这些服务。我有点困惑于为这种类型的服务建模我的猫鼬数据库的最佳方式。

所以这个模型有点像

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个答案

夏谦
2023-03-14

没关系,从一系列帖子中找到了一个非常详细的答案https://www.mongodb.com/blog/post/6-rules-of-thumb-for-mongodb-schema-design-part-1

 类似资料:
  • 我是Cassandra的新手,正在寻找一个关于如何为具有以下一般结构的数据建模的最佳实践: 对于不同的用户,附加的数据字段不一定相同(字段的名称或这些字段的类型) 示例(csv格式:) 我考虑过的几个选择: null 每个User_id创建Keyspace 每个关键字空间创建表“data” 备注: null null 创建多个keyspaces(例如“x”个keyspaces),每个keyspac

  • 问题内容: 我正在尝试确定通过JDBC ping数据库的最佳方法。“最好”是指快速且低开销。例如,我考虑过执行以下命令: 但是我相信DUAL表是特定于Oracle的,并且我需要一些更通用的东西。 请注意,它具有一个方法,但是javadoc指出该方法不能用于测试连接的有效性。 问题答案: 是的,那只能是Oracle,但是在JDBC中没有通用的方法可以做到这一点。 大多数连接池实现都有一个配置参数,您

  • 我正在做一个项目,没有开发应用程序的经验,我想用最好的和简单的方法来构建基于云的SaaS产品。 有人能告诉我应该使用哪个技术栈,哪个后端lang/框架,db,哪个云公司等吗?到目前为止,我只知道后端的php,但我想先学习js,然后再学习nodeJS,然后将其用于后端和db,我想使用mysql。 有些事情可能会影响你的答案,我其实并不期待将来会有太多流量。请说明考虑到这两种情况,预期流量非常低的应用

  • 问题内容: 我正在使用Mongoose来管理Mongo数据库。我的连接文件非常简单: 然后在我的app.js中 并且“猫鼬”变量在全球范围内可用。我不想使用全局变量(至少不直接使用)。是否有更好的方法通过单例模式或其他方法在节点之间共享数据库连接变量(我正在使用express.js)? 问题答案: 我只是在app.js文件中执行以下操作: 此时,任何需要访问该模型的文件都可以执行以下操作: 最后,

  • 问题内容: 在阅读了有关数据库架构迁移和版本的许多问题之后,我提出了一种在更新过程中安全地更新数据库架构的方案。基本思想是,在更新期间,我们将数据库导出到文件中,删除并重新创建所有表,然后重新导入所有内容。那里没有什么花哨或冒险的地方。 问题在于该系统在某种程度上是“病毒的”,这意味着仅 添加 列或表是安全的,因为删除列或表会在重新导入数据时引起问题。通常,忽略这些列就可以了,但问题是实际上已重构

  • 问题内容: 这对我来说是一个耻辱,但我不知道: 您应该使用克隆来复制阵列,因为通常这是最快的方法。 如Josh Bloch在此博客中所述:http : //www.artima.com/intv/bloch13.html 我一直都习惯。两种方法都是本机的,所以可能没有深入研究我不知道的库来源,为什么会这样。 我的问题很简单:为什么这是 最快的 方法? 有什么区别 ? 此处 说明了差异,但未回答为何