Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB-商店策略_Mongodb - Fatal编程技术网

MongoDB-商店策略

MongoDB-商店策略,mongodb,Mongodb,来自关系数据库,如您关于如何建模数据的帮助。什么是最有效的方法 我正在开发一个非常简单的微服务来管理组织。 每个组织都有一个字段:名称和该组织中包含的用户id列表 我可以看到两种建模数据的方法: 1。单独的文档: 组织收集: 用户集合: 2。或作为嵌套文档: 组织收集: 根据您的经验,每种策略的优缺点是什么?你喜欢哪种方式?每种策略都需要考虑什么?在mongodb中有没有其他更好的方法来建模这些数据 编辑: 我需要的查询类型包括: 获取所有组织数据(不一定需要用户id) 按组织id获取组织数据(

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

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

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

1。单独的文档:

组织收集:

用户集合:

2。或作为嵌套文档:

组织收集:

根据您的经验,每种策略的优缺点是什么?你喜欢哪种方式?每种策略都需要考虑什么?在mongodb中有没有其他更好的方法来建模这些数据

编辑: 我需要的查询类型包括:

  • 获取所有组织数据(不一定需要用户id)
  • 按组织id获取组织数据(包括其用户)
  • 按用户id获取组织

  • 提前感谢

    考虑到高级用例,我更喜欢非规范化模型(嵌套),这是您在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',
       }
    }