MongoDB-商店策略
来自关系数据库,如您关于如何建模数据的帮助。什么是最有效的方法 我正在开发一个非常简单的微服务来管理组织。 每个组织都有一个字段:MongoDB-商店策略,mongodb,Mongodb,来自关系数据库,如您关于如何建模数据的帮助。什么是最有效的方法 我正在开发一个非常简单的微服务来管理组织。 每个组织都有一个字段:名称和该组织中包含的用户id列表 我可以看到两种建模数据的方法: 1。单独的文档: 组织收集: 用户集合: 2。或作为嵌套文档: 组织收集: 根据您的经验,每种策略的优缺点是什么?你喜欢哪种方式?每种策略都需要考虑什么?在mongodb中有没有其他更好的方法来建模这些数据 编辑: 我需要的查询类型包括: 获取所有组织数据(不一定需要用户id) 按组织id获取组织数据(
名称
和该组织中包含的用户id列表
我可以看到两种建模数据的方法:
1。单独的文档:
组织收集:
用户集合:
2。或作为嵌套文档:
组织收集:
根据您的经验,每种策略的优缺点是什么?你喜欢哪种方式?每种策略都需要考虑什么?在mongodb中有没有其他更好的方法来建模这些数据
编辑:
我需要的查询类型包括:
提前感谢考虑到高级用例,我更喜欢非规范化模型(嵌套),这是您在mongoDB中的优势,我们必须利用它从mongo中获得更多。您提到的“选项2”不是嵌套文档,您只是将字段维护为数组 在嵌套模型中,数据如下所示:
{
id: '88c4e67a-c4ba-11e9-aa8c-2a2ae2dbcce4',
name: 'some organization,
users: {
user1: 'abc',
user2: 'def',
user3: 'xyz',
}
}
谢谢大家! 决定如何对数据建模的最佳方法是问问自己将如何查询数据。一旦你知道你要问什么类型的问题,你将能够以逻辑的方式存储数据。@Lix非常重要的一点。你说得对。我将用这一见解来编辑这个问题。例如,您可能正在查询一个组织中的用户列表,因此,子文档听起来很合适。您可能希望通过用户搜索组织-为此,将用户嵌套在组织中可能不是最好的主意…@Lix我实际上需要两者:按用户id查询和按组织id查询。我不确定我是否满意嵌套的用户:{…}模型。似乎很难维护,因为我不需要
user1
,user2
,user3
键。它不代表任何东西。此存储策略的好处是什么?您的优势是,您可以在一个集合中维护所有相关数据。通过这种方式,可以避免连接(从多个集合获取数据)。请记住,联接对查询性能有影响。在建模之前,还有许多其他因素需要考虑,比如你的应用程序读写密集型、预期的测试程序集数量、访问模式、检索模式等等。但在简单、好的数据模型中,必须始终设法将相关数据保持在一起
{
userId: '7e27ff68-c4ba-11e9-aa8c-2a2ae2dbcce4',
organizationId: '88c4e67a-c4ba-11e9-aa8c-2a2ae2dbcce4'
}
{
id: '88c4e67a-c4ba-11e9-aa8c-2a2ae2dbcce4',
name: 'some organization,
users: [
'7e27ff68-c4ba-11e9-aa8c-2a2ae2dbcce4',
]
}
{
id: '88c4e67a-c4ba-11e9-aa8c-2a2ae2dbcce4',
name: 'some organization,
users: {
user1: 'abc',
user2: 'def',
user3: 'xyz',
}
}