mongodb 子文档是否等同于 Firestore 子集合?
Is mongodb sub documents equivalent to Firestore subcollections?
对于那些使用 Firebase (Firestore) 的人来说,你可以有一个包含文档的集合,其中每个文档都有一个 id,然后一个集合可以包含一个子集合(相当于一个嵌入式文档作为一个数组文件数量 属性).
那么,这个子集合可以容纳很多文档,每个文档都有一个id。
在 Firestore 中,子集合是延迟加载的。
它将获取该集合中的文档,但如果有一个或多个子集合,它将不会检索它,除非专门转到该路径。例如:collection/document/subcollectionname/anotherdocument
所以 2 个问题:
- 嵌入式文档是懒加载的吗?我不想获得包含所有嵌入文档(可能是一百万个)的文档,除非我明确访问它。
- 如何确保 MongoDB 中的每个嵌入文档都获得 ObjectID("blablabla") 形式的“_id”?
编辑:
我目前有一个 firestore 实现,它背后有一个 subcollection/s 实践。
示例:组织 => documentId => 项目 => projectId => activities => :activityType => activity编号
- organization 包含文档的集合(每个文档 = organization)。
- 每个组织文档都包含一个架构(id、名称、语言等。)和一些子集合,其中一个是 projects 子集
- projects 子集合包含 projects.
的文档
- 一个项目文档包含项目架构(id、名称、位置等。)和一个名为 activities 的子集合。
- activities 子集合拥有自己的架构(id、类型、类别等...)和另外 6 个子集合,每个代表一个 activity 类型。
- 每个 activity 子集合都有自己的架构。没有更多的子集。
现在,好处是如果我选择获取所有组织,那么我将只获取组织 collection[=] 的 documents 61=] 而不是嵌入的子集合(projects、etc..)而在 MongoDB,我会得到 EVERYTHING 每个文档。
如何在 MongoDB 中实现具有延迟加载效果的具有自己的嵌套文档结构的相同嵌套文档?
一个项目可以有多少个活动?如果没有限制,那么您最好为活动创建一个根级集合。 在 MongoDB 中,最大 BSON 文档大小为 16 MB。 因此,您可能无法存储所有项目及其活动在单个文档(组织文档)中。
我会创建 3 个集合,即组织、项目和活动。
- 每个组织都应该在 organizations 集合中有一个类似于您在 Firestore 中的文档。
- 每个项目都应该在 projects 集合中有一个包含字段“organizationID”的文档,以便您可以使用其 ID 查询特定组织的项目。这相当于您的项目子集合中的文档。每个项目还必须有自己的唯一 ID。
- 每个 activity 都应该在 activities 集合中有一个包含字段“projectID”的文档,以便可以检索特定项目的活动。
我已经添加了那些额外的 organizationID
、projectID
字段,尽管您有 _id
-端查询。
您不必担心 16 MB 文档大小限制,只要您有正确的 ID,查询项目和活动就会更容易.
查询某项目活动:
await db.collection("activities").find({projectID: "myProjectID"}).toArray()
此后由您决定如何使用预测、聚合等编写查询。
对于那些使用 Firebase (Firestore) 的人来说,你可以有一个包含文档的集合,其中每个文档都有一个 id,然后一个集合可以包含一个子集合(相当于一个嵌入式文档作为一个数组文件数量 属性).
那么,这个子集合可以容纳很多文档,每个文档都有一个id。
在 Firestore 中,子集合是延迟加载的。
它将获取该集合中的文档,但如果有一个或多个子集合,它将不会检索它,除非专门转到该路径。例如:collection/document/subcollectionname/anotherdocument
所以 2 个问题:
- 嵌入式文档是懒加载的吗?我不想获得包含所有嵌入文档(可能是一百万个)的文档,除非我明确访问它。
- 如何确保 MongoDB 中的每个嵌入文档都获得 ObjectID("blablabla") 形式的“_id”?
编辑: 我目前有一个 firestore 实现,它背后有一个 subcollection/s 实践。
示例:组织 => documentId => 项目 => projectId => activities => :activityType => activity编号
- organization 包含文档的集合(每个文档 = organization)。
- 每个组织文档都包含一个架构(id、名称、语言等。)和一些子集合,其中一个是 projects 子集
- projects 子集合包含 projects. 的文档
- 一个项目文档包含项目架构(id、名称、位置等。)和一个名为 activities 的子集合。
- activities 子集合拥有自己的架构(id、类型、类别等...)和另外 6 个子集合,每个代表一个 activity 类型。
- 每个 activity 子集合都有自己的架构。没有更多的子集。
现在,好处是如果我选择获取所有组织,那么我将只获取组织 collection[=] 的 documents 61=] 而不是嵌入的子集合(projects、etc..)而在 MongoDB,我会得到 EVERYTHING 每个文档。
如何在 MongoDB 中实现具有延迟加载效果的具有自己的嵌套文档结构的相同嵌套文档?
一个项目可以有多少个活动?如果没有限制,那么您最好为活动创建一个根级集合。 在 MongoDB 中,最大 BSON 文档大小为 16 MB。 因此,您可能无法存储所有项目及其活动在单个文档(组织文档)中。
我会创建 3 个集合,即组织、项目和活动。
- 每个组织都应该在 organizations 集合中有一个类似于您在 Firestore 中的文档。
- 每个项目都应该在 projects 集合中有一个包含字段“organizationID”的文档,以便您可以使用其 ID 查询特定组织的项目。这相当于您的项目子集合中的文档。每个项目还必须有自己的唯一 ID。
- 每个 activity 都应该在 activities 集合中有一个包含字段“projectID”的文档,以便可以检索特定项目的活动。
我已经添加了那些额外的 organizationID
、projectID
字段,尽管您有 _id
-端查询。
您不必担心 16 MB 文档大小限制,只要您有正确的 ID,查询项目和活动就会更容易.
查询某项目活动:
await db.collection("activities").find({projectID: "myProjectID"}).toArray()
此后由您决定如何使用预测、聚合等编写查询。