在mongodb中使用嵌套文档结构

时间:2017-04-05 07:12:02

标签: mongodb mongodb-query

我计划为MongoDB Schema设计使用嵌套文档结构,因为我不想进行平面架构设计,因为在我的情况下,我只需要在一个查询中获取结果。

由于MongoDB对文档有大小限制。 activiti docs

create index on thread(tags @> '{2}');

我不需要获取嵌套数据,但只需要我的嵌套数据进行过滤和查询。

我想知道我是否仍会受到MongoDB大小限制的约束,即使我仅将嵌入数据用于查询和过滤目的而且从不用于获取嵌套数据,因为根据我的理解,在这种情况下, MongoDB不会在内存中加载完整的文档,只会加载选定的字段吗?

  

嵌套架构设计示例

array_position

1 个答案:

答案 0 :(得分:1)

当你说" 时,我认为你的理解是正确的,因为根据我的理解,在这种情况下,MongoDB不会在内存中加载完整的文档但只会选择?字段"

如果我们看到MongoDB Doc。然后它读取

  

最大BSON文档大小为16兆字节。最大文档大小有助于确保单个文档不会使用过多的RAM,或者在传输过程中使用过多的带宽。为了存储大于最大大小的文档,MongoDB提供了GridFS API。

因此文档大小的明确限制为16 MB。 Mongo应该阻止你保存这样一个大于这个大小的文件。

如果我同意你的理解一段时间,那么让我们说它允许 保存任何大小的文档但不允许超过16 MB的RAM。但另一方面,在存储数据时,它不知道将对此数据运行哪些查询。因此,最终您将插入无法在以后使用的大型文档。 (因为在插入时我们不会告诉查询模式,我们甚至可以尝试稍后一次获取完整文档)。

如果限制是在传输上(假设假设)那么有很多方法(通过代码)软件开发人员可以将数据带入集群的RAM中,并且他们不会超过16 MB的限制(这是'#s; s' s他们如何对大文件进行IO操作。他们会取笑这个限制,只是让它无用。我希望MongoDB的创建者知道它并且不希望它发生。

此外,如果限制是在传输,那么就不需要单独收集。我们可以将所有内容放在一个集合中,只需编写智能查询即可获取数据。如果获取的数据超过16 MB,则将其部分获取并忘记限制。但它并没有这样做。

所以限制必须是文档大小,否则它可能会产生很多问题。

在我看来,如果你只是需要"医生工作"用于过滤或查询目的的数据(如果您还认为"医生工作"将导致文档超过16 MB限制),那么将它保存在单独的集合中是件好事。

最终所有事情都依赖于查询和数据模式。如果医生可以轮流在多家医院服务,那么将医生分开收集将会很棒。