我应该将其保存在同一个用户集合中还是创建另一个集合?

Should I save this in the same user collection or create another collection?

我正在使用 reactjs 和 firebase firestore 创建这个项目,用户可以在其中注册并登录到这个网站。登录后,用户将拥有一个存储其用户 ID 的二维码。在管理员方面,管理员可以扫描他们的二维码,然后二维码将检索用户的用户 ID。然后管理员可以看到用户的信息,例如他们的姓名、生日、地址和 phone 号码。并且还可以输入用户接种的疫苗是什么以及接种疫苗的人等等,然后提交。

我不确定是否应该在管理员提交输入的用户疫苗接种状态时创建另一个集合,还是应该将其保存在用户集合中。

这是用户合集:

我问这个是因为我将为至少接种过 1 剂疫苗或完全接种疫苗的人制作每种疫苗的月度图表。如果我只是通过创建另一个集合将它保存在 firestore 中或者只是将它保存在用户集合中,这样会好吗?

月度图表与此类似:

这是管理员可以输入用户疫苗接种信息的表格。管理员将输入用户接种的疫苗类型,无论从我的位置如何,人们都无法选择他们将接种的疫苗类型。

如果每个用户最多可以有 2 剂,您可以简单地将数据存储为用户文档中的地图。

{
  firstName: "name",
  ...otherFields,
  doses: {
    1: {
      ...dose1Info
    },
    2: {
      ...dose2Info
    }
  }
}

然后您可以使用 dot notation 像这样使用那些嵌套字段进行查询:

const query = colRef.where("doses.1.type", "==", "AstraZeneca")

此查询将 return 首次使用 AstraZeneca 的用户的文档。同样,您可以根据其他剂量信息字段进行查询。

虽然@Dharmaraj 的回答可行,但您也可以考虑如下所示的替代解决方案:

Firestore-root
  |
  --- users (collection)
       |
       --- $uid (document)
            |
            --- vaccinType: "AstraZeneca"
            |
            --- doseOne: true
            |
            --- doseTwo: true

要查找所有接种了“AstraZeneca”疫苗的用户,您可以使用以下查询:

const query = usersRef.where("vaccinType", "==", "AstraZeneca")

要查找所有接种“AstraZeneca”疫苗并接种第一剂的用户,只需使用:

const query = usersRef.where("vaccinType", "==", "AstraZeneca")
                  .where("doseOne", "==", true)

要查找所有已接种“AstraZeneca”疫苗并获得第一剂和第二剂的用户,您可以使用:

const query = usersRef.where("vaccinType", "==", "AstraZeneca")
                  .where("doseOne", "==", true)
                  .where("doseTwo", "==", true)

如果您需要额外的剂量数据,您可以为此创建两个单独的字段。