Reactjs 如何在firestore中正确构造数据?
我目前在React+Firebase项目中工作。在Firestore中,我需要保存用户的数据,但目前我不知道使用哪种方法。 将有两个用户,教师和学生 第一个选项:设置用户集合,每个文档都有“用户类型”字段,用于定义用户是教师还是学生。我看到这种方法的问题是,比方说:Reactjs 如何在firestore中正确构造数据?,reactjs,firebase,google-cloud-firestore,Reactjs,Firebase,Google Cloud Firestore,我目前在React+Firebase项目中工作。在Firestore中,我需要保存用户的数据,但目前我不知道使用哪种方法。 将有两个用户,教师和学生 第一个选项:设置用户集合,每个文档都有“用户类型”字段,用于定义用户是教师还是学生。我看到这种方法的问题是,比方说: 教师输入其凭证并尝试登录。成功登录后,我的系统将转到firestore并搜索与教师相关的信息。因此,基本上in将查询“用户”集合,以根据电子邮件(电子邮件将是唯一的)和“用户类型”=“教师”查找数据在最坏的情况下,用户是一个非常大
- 教师输入其凭证并尝试登录。成功登录后,我的系统将转到firestore并搜索与教师相关的信息。因此,基本上in将查询“用户”集合,以根据电子邮件(电子邮件将是唯一的)和“用户类型”=“教师”查找数据在最坏的情况下,用户是一个非常大的集合,然后获取教师数据的查询将影响用户体验,因为firestore需要阅读大量文档。
- 教师输入其凭证并尝试登录。成功登录后,我的系统将进入firestore并搜索“教师”集合中的信息,以非常快的速度检索我需要的数据这里的问题是,我需要构建两个按钮,这让我感到震惊,因为它使我的web应用程序不太友好或不太直观。
用户类型进行筛选。您不需要在where
中使用。只需创建一个对与用户关联的文档的引用,然后get()
it:
const userDoc = await db.collection('users').doc(userEmail).get();
正如尼古拉斯所说,你应该考虑使用UID而不是电子邮件。
用户是一个非常大的集合,然后获取教师数据的查询将影响用户体验,因为firestore需要读取大量文档
那也不是真的
关于尼古拉斯塔的回答
如果你有两个像这样的.where子句,我想你需要创建一个索引。代码应该抛出一个包含url的异常;遵循该url,它将允许您创建索引(一旦创建了索引,就不再发生异常)
只有在将等式(=
)与范围(
,=
等)组合时,才需要索引。您可以随意组合多个==
,而无需索引。我以为firebase会读取所有文档,然后返回符合条件的文档。所以,如果我收集了10000个用户,我让firestore只给我X个用户,firestore就不会花很多时间给我查询结果了?@HenryPeregrino不,它不是这样工作的。好多了。你看得很好。感谢您的帮助,现在我对firestore查询的工作原理有了更好的了解!