首页 > 解决方案 > MongoDB——存储策略

问题描述

来自关系数据库,例如您对如何为我的数据建模的帮助。什么是最有效的方法?

我正在开发一个非常简单的微服务来管理组织。每个组织都有一个字段:name以及该组织中包含的用户 ID 列表。

我可以看到两种建模数据的方法:

1. 单独的文件:

组织收藏:

{
   id: '88c4e67a-c4ba-11e9-aa8c-2a2ae2dbcce4',
   name: 'some organization'
}

用户集合:

{ 
   userId: '7e27ff68-c4ba-11e9-aa8c-2a2ae2dbcce4', 
   organizationId: '88c4e67a-c4ba-11e9-aa8c-2a2ae2dbcce4'
}

2.或作为嵌套文档:

组织收藏:

{
   id: '88c4e67a-c4ba-11e9-aa8c-2a2ae2dbcce4',
   name: 'some organization,
   users: [
      '7e27ff68-c4ba-11e9-aa8c-2a2ae2dbcce4',
   ]
}

根据您的经验,每种策略的优缺点是什么?你喜欢什么方式?每个策略需要考虑什么?是否有另一种更好的方法可以在 mongodb 中对这些数据进行建模?

编辑:我需要的查询类型是:

  1. 获取所有组织数据(不一定需要用户 ID)
  2. 按组织 ID 获取组织数据(包括其用户)
  3. 通过用户 ID 获取组织。

提前致谢

标签: mongodb

解决方案


鉴于高级用例,我更喜欢非规范化模型(嵌套),这是您在 mongoDB 中的优势,我们必须利用它从 mongo 中获得更多收益。您提到的“选项 2”不是嵌套文档,您只是将字段维护为数组

在嵌套模型中,数据将如下所示:

{
   id: '88c4e67a-c4ba-11e9-aa8c-2a2ae2dbcce4',
   name: 'some organization,
   users: {
      user1: 'abc',
      user2: 'def',
      user3: 'xyz',
   }
}

谢谢!


推荐阅读