当前位置: 首页 > 知识库问答 >
问题:

mongodb子文档是否等同于Firestore子集合?

仰雅昶
2023-03-14

对于那些使用Firebase(FiRecovery)的人来说,您可以拥有一个包含文档的集合,其中每个文档都有一个id,然后一个集合可以保存一个子集合(相当于嵌入文档作为文档数组作为属性)。

然后,这个子集合可以容纳许多文档,而每个文档都有一个id。

在Firestore中,子集合是延迟加载的。

它将获取该集合上的文档,但如果有一个或多个子集合,它将不会检索该集合,除非特别转到该路径。e、 g:集合/文档/子集合名称/其他文档

所以有两个问题:

  1. 嵌入式文档是否延迟加载?除非我明确访问它,否则我不想获取包含所有嵌入式文档(可能是一百万个)的文档。
  2. 如何确保MongoDB中的每个嵌入文档都获得ObjectID("blablabla")形式的"_id"?

编辑:我目前有一个fiRecovery实现,它背后有一个子集合/实践。

示例:组织=

  1. 保存文档的组织集合(每个文档=组织)
  2. 每个组织文档都有一个模式(id、名称、语言等)还有几个子集合,其中一个是项目子集合
  3. projects子集合保存项目的文档
  4. 项目文档包含项目模式(id、名称、位置等)以及一个名为“活动”的子集合
  5. activities子集合拥有自己的模式(id、类型、类别等)还有6个子集合,每个集合代表一种活动类型
  6. 每个活动子集合都有自己的模式。没有更多的子集合

现在,它的好处是,如果我选择获取所有组织,那么我将只获取组织集合的文档,而不是嵌入的子集合(项目等)在MongoDB时,我会得到每个文档的所有内容。

在MongoDB中,我如何通过自己的嵌套文档结构和延迟加载效应实现相同的嵌套文档?

共有1个答案

夏侯昆琦
2023-03-14

一个项目可以有多少个活动?如果没有限制,那么您最好为活动创建根级别集合。在MongoDB中,最大BSON文档大小为16 MB。也就是说,您可能无法将所有项目及其活动存储在单个文档(组织文档)中。

我将创建3个集合,即组织、项目和活动。

  1. 每个组织的“组织”集合中都应该有一个与Firestore中类似的文档

我已经添加了那些额外的组织ID项目ID字段,即使您有_id,以防您想在那里拥有FiRecovery文档ID以方便并排查询。

这样您就不必担心16 MB的文档大小限制,只要您有正确的ID,就可以更轻松地查询项目和活动。

某个项目的查询活动:

await db.collection("activities").find({projectID: "myProjectID"}).toArray()

此后,如何编写带有投影、聚合等功能的查询取决于您。

 类似资料:
  • 我目前正在使用firestore的子集合模式,它允许我将集合保存在文档中。 这意味着对于我的组织集合,我有组织文档,每个文档都有子集合,比如:项目、成员等等。。。通过这种方式,我可以始终保证,对于一个特定的文档,我以一种可扩展的方式将其所有特定的数据都限定在它的范围内。这解决了在文档属性中嵌入数据(比如数组)的问题,这些数据可能会失控。 现在,我在mongoDB中没有找到这样的东西。我确实发现Do

  • 在我的集合的SnapshotListener中,我使用以下命令循环遍历文档: 在 for 循环中的每个文档中,让我们称之为 ,我在 Cloud Firestore 上还有另一个文档集合。我想检索内子集合中的所有文档(每个文档只有一个字符串字段)。我能够做一个来获取本身,我用它来获取字符串字段,但我不知道如何获取其子集合中的文档。

  • 为了查询子集合和父文档,我对firest的文档及其最佳实践有一些问题。我试图使用Typecript在我的Firebase函数中进行查询。 DB: ├── 用户(集合) │ └── 用户(ID为的文档) │ │ └── 计划(子集合) 我有一个数组中的用户ID列表,我需要从用户文档和当前文档的子集合计划中收集信息。 但是如何从用户文档和子集合(计划)文档(当前)中获取数据,我不知道在场景中最有效的查

  • 我有文档,其中包含子集合。现在,我想获取子集合中至少有一项的所有项目。这可能吗? 类似于: < code>getDocs(collection(getDB()," Projects)),其中(" Items.size ","

  • 我的FiRecovery数据库中有一个名为Reports的集合,我已经在其中添加了文档。但我现在的问题是我想在报表中添加一个带有子集合的文档,有什么想法吗?

  • 我在我的FiRecovery数据库中查询子集合内的所有文档时遇到困难。(我使用的是Node.js) 我的目标是从名为 我看了看留档https://firebase.google.com/docs/firestore/query-data/get-data但没有任何结果如何解决问题。 我现在的问题是这样的: 但是我得到了