Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如何在firestore中正确构造数据?_Reactjs_Firebase_Google Cloud Firestore - Fatal编程技术网

Reactjs 如何在firestore中正确构造数据?

Reactjs 如何在firestore中正确构造数据?,reactjs,firebase,google-cloud-firestore,Reactjs,Firebase,Google Cloud Firestore,我目前在React+Firebase项目中工作。在Firestore中,我需要保存用户的数据,但目前我不知道使用哪种方法。 将有两个用户,教师和学生 第一个选项:设置用户集合,每个文档都有“用户类型”字段,用于定义用户是教师还是学生。我看到这种方法的问题是,比方说: 教师输入其凭证并尝试登录。成功登录后,我的系统将转到firestore并搜索与教师相关的信息。因此,基本上in将查询“用户”集合,以根据电子邮件(电子邮件将是唯一的)和“用户类型”=“教师”查找数据在最坏的情况下,用户是一个非常大

我目前在React+Firebase项目中工作。在Firestore中,我需要保存用户的数据,但目前我不知道使用哪种方法。 将有两个用户,教师和学生

第一个选项:设置用户集合,每个文档都有“用户类型”字段,用于定义用户是教师还是学生。我看到这种方法的问题是,比方说:

  • 教师输入其凭证并尝试登录。成功登录后,我的系统将转到firestore并搜索与教师相关的信息。因此,基本上in将查询“用户”集合,以根据电子邮件(电子邮件将是唯一的)和“用户类型”=“教师”查找数据在最坏的情况下,用户是一个非常大的集合,然后获取教师数据的查询将影响用户体验,因为firestore需要阅读大量文档。
第二个选项:创建两个集合,“教师”集合和“学生”集合。然后在我的系统中,我将设置两个登录按钮,一个作为教师登录,另一个作为学生登录,而不是单一的登录按钮。然后,对于相同的示例:

  • 教师输入其凭证并尝试登录。成功登录后,我的系统将进入firestore并搜索“教师”集合中的信息,以非常快的速度检索我需要的数据这里的问题是,我需要构建两个按钮,这让我感到震惊,因为它使我的web应用程序不太友好或不太直观。
希望我能解释清楚,我不是最好的英文作家,谷歌翻译也帮不了什么忙。 任何帮助都将不胜感激。 提前谢谢

因此,基本上in将查询“用户”集合,根据电子邮件(电子邮件将是唯一的)和“用户类型”=“教师”查找数据

事实并非如此。如果电子邮件确实是唯一的,则不需要按
用户类型进行筛选。您不需要在where
中使用
。只需创建一个对与用户关联的文档的引用,然后
get()
it:

const userDoc = await db.collection('users').doc(userEmail).get();
正如尼古拉斯所说,你应该考虑使用UID而不是电子邮件。

用户是一个非常大的集合,然后获取教师数据的查询将影响用户体验,因为firestore需要读取大量文档

那也不是真的

关于尼古拉斯塔的回答

如果你有两个像这样的.where子句,我想你需要创建一个索引。代码应该抛出一个包含url的异常;遵循该url,它将允许您创建索引(一旦创建了索引,就不再发生异常)


只有在将等式(
=
)与范围(
=
等)组合时,才需要索引。您可以随意组合多个
==
,而无需索引。

我以为firebase会读取所有文档,然后返回符合条件的文档。所以,如果我收集了10000个用户,我让firestore只给我X个用户,firestore就不会花很多时间给我查询结果了?@HenryPeregrino不,它不是这样工作的。好多了。你看得很好。感谢您的帮助,现在我对firestore查询的工作原理有了更好的了解!