mongodb - 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 中对这些数据进行建模?
编辑:我需要的查询类型是:
- 获取所有组织数据(不一定需要用户 ID)
- 按组织 ID 获取组织数据(包括其用户)
- 通过用户 ID 获取组织。
提前致谢
解决方案
鉴于高级用例,我更喜欢非规范化模型(嵌套),这是您在 mongoDB 中的优势,我们必须利用它从 mongo 中获得更多收益。您提到的“选项 2”不是嵌套文档,您只是将字段维护为数组
在嵌套模型中,数据将如下所示:
{
id: '88c4e67a-c4ba-11e9-aa8c-2a2ae2dbcce4',
name: 'some organization,
users: {
user1: 'abc',
user2: 'def',
user3: 'xyz',
}
}
谢谢!
推荐阅读
- python - Python Chatterbot 与 learn_response 函数有关的问题
- r - 创建具有已知结果和概率的向量
- python - 尝试在python中使用for循环创建一串位数字
- docusignapi - 如何为没有电子邮件和姓名的收件人获取嵌入式签名 URL
- python - Python Launcher:默认运行意外版本的 Python
- file-upload - MVC 5 文件上传
- python - Python Web Scraping:如何获取内部站点的 HTML
- python - Flask 中的用户身份验证 - 如何在函数中实现?
- java - JDA - 机器人听取其他机器人的反应
- python - 从 S3 存储桶中读取大量 CSV 文件