Firestore 中的集合结构

collection structure in Firestore

我是 firebase/backend 世界的新手。我最近开始学习了。所以我决定做一个示例项目来学习。该项目更像是 LinkedIn/Smartr 等职位简介。我正在努力决定我应该如何构建我的数据库。

我在前端使用 Angular 13,在后端使用 Firebase(@angular/fire)。

所以我要构建的项目非常简单。它将包含用户的一些基本信息,例如 firstNamelastNameagetitlelocation。这些是完成个人资料所需的基本信息。

所以在 Firestore 中,我创建了一个名为 Users 的集合,其中每个用户都有一个使用以下信息生成的文档 ID .

{
  age: 23,
  email: "demo.user@mail.com",
  firstName: "Demo",
  lastName: "User",
  title: "Engineer"
  location: "USA"
  uid: "232dsf23"
}

系统也会有一个认证系统。使用已经定义的 firebase 身份验证系统。

所以我保留的 uid 是我在用户注册后收到的 id 响应。我将其用作 Users 文档 ID.

到目前为止我已经做到了。所以接下来我想在我的演示项目中添加的是工作经验部分。

该功能将与我们在 LinkedIn/Smartr 中看到的完全一样。使用 modal/dialog.

用户一次只能 add/edit 一次工作经验

所以我的查询是:

  1. 我是否应该在 users 集合的每个文档中包含 workExperience 一个新对象 属性。如果我在 users 集合的文档中保留一个名为 workExperience 的新 属性,那么如果我没记错的话,每次体验都需要一个 ID,因为用户可以 [=70= 】 一次只能体验一次。因此,由于 firebase 不支持自动增量 ID(据我所知),那么我应该如何处理它?

  2. 如果我创建一个名为 work-experience 的单独集合,其中添加新体验会在该集合中为每个用户创建一个新文档,那么我将如何连接哪些体验与之相关用户?以及我应该如何查询以获得预期的数据。

我应该遵循哪个程序?如果您有其他建议我应该如何处理,请提出建议。

答案在很大程度上取决于您将如何在 front-end 中显示此数据。

如果您打算在同一屏幕上显示基本用户信息工作经验 那么最好的办法是将工作经验添加到用户的 Firestore 文档中:您只对该屏幕执行一个查询。

另一方面,如果您打算先显示一个包含 基本用户信息 的屏幕,其中 link/button 可以打开 另一个屏幕 显示 工作经验 然后将工作经验数据存储在其他文档中是有意义的。您仅在最终用户决定显示此数据时查询此数据。

为此,您可以像您提到的那样拥有一个“名为 work-experience 的单独集合”,并且对于每个用户,您使用 userID 作为工作体验 Firestore 文档的 ID(您可以很好地重复使用相同的跨不同集合的文档 ID)。这样查询特定用户的工作经历文档就非常容易了:只需在查询中交换集合名称即可。

- users (collection)
  - userId1 (doc)
  - userId2 (doc)
  ...
- work-experiences (collection)
  - userId1 (doc)
  - userId2 (doc)
  ...

如果您打算增加一些类似于工作经验部分的额外部分,例如教育爱好,您可以使用相同的方法

- users (collection)
  - userId1 (doc)
  - userId2 (doc)
  ...
- work-experiences (collection)
  - userId1 (doc)
  - userId2 (doc)
  ...
- educations (collection)
  - userId1 (doc)
  - userId2 (doc)
  ...
- hobbies (collection)
  - userId1 (doc)
  - userId2 (doc)
  ...

但另一种有趣的方法是为每个用户创建一个 sub-collection,例如 details-sections,您可以在其中存储具有固定 ID 的文档:

- users (collection)
  - userId1 (doc)
    - details-sections (sub-collection)
       - work-experience (doc)
       - education (doc)
       - hobbies (doc)
  - userId2 (doc)
    - details-sections (sub-collection)
       - work-experience (doc)
       - education (doc)
       - hobbies (doc)

此数据模型的主要优点是可以轻松地从 Firebase 控制台导航到用户数据。从查询性能或成本的角度来看,它与之前的数据模型完全相似。两种模型之间的安全规则略有不同,但不会真正影响这两种模型之间的选择。