MongoDB集合结构

MongoDB集合结构,mongodb,mongodb-query,spring-data-mongodb,Mongodb,Mongodb Query,Spring Data Mongodb,我有一个名为User的集合 用户有许多信息可以组合在一起,例如: {address : {street:"xx", city:"xx"}} {history: {school:"xx", job: "xx"}} {..} 所以我想知道什么是最佳实践 1. First way, Using nested fields: {user: {address : {street:"xx", city:"xx"}} {history: {school:"xx", job: "xx"}} {

我有一个名为User的集合

用户有许多信息可以组合在一起,例如:

{address : {street:"xx", city:"xx"}}
{history: {school:"xx", job: "xx"}}
{..}
所以我想知道什么是最佳实践

1. First way, Using nested fields:

{user: 
  {address : {street:"xx", city:"xx"}}
  {history: {school:"xx", job: "xx"}}
  {..}
}

2. Second way: Just put them all together.

    {user: 
      street:"xx", 
      city:"xx",
      ...
      school:"xx", 
      job: "xx",
      ...
    }
第一种方法显然对人类更具可读性,并且使人类更容易找到相关信息

像第一种方法那样分组/嵌套数据的缺点是什么?
它会使查询嵌套字段的速度变慢吗?索引问题?有什么想法吗?

如果您将额外的数据存储在用户下,则可以更快地读取和写入整个用户文档

如果在单独的集合下添加额外数据,则可以更快地访问、查找/更新该数据(取决于索引)。MongoDB确实启用了


我的建议是尝试列出您常用的数据访问用例,创建一个包含大量模拟数据的测试数据库,然后使用查询和聚合来测试性能,以便在不同的存储建模选项之间进行延迟。

mongodb不是OODB,因此它不是为存储对象而设计的,即使它是可能的。将“地址”存储为包含街道和城市的对象有什么好处?用第二种方法(扁平化)存储会容易得多,所以查询会更简单。我想第一种方法更容易阅读。信息可以相应地分组,读取相关数据更容易。但是有没有性能方面的问题?可能是重复的对,是的,我想确认答案是没有区别的?所以我在问题中提到的第一种方法,不涉及使用单独的集合或数组。我只是把它构造成一个嵌套字段。这是否会使对嵌套字段的查询/索引成为可能?@user1955934不确定您在评论中的意思,但是,可以对嵌套信息进行查询,但不那么简单。另外,我强烈建议您查看聚合API。另外,不要忘记查询上的解释选项。