Firebase Firestore正在flifter中忽略查询中的where子句
如何找到与登录电子邮件匹配的文档 当我尝试使用下面的代码时,Firestore忽略了Firebase Firestore正在flifter中忽略查询中的where子句,firebase,flutter,google-cloud-firestore,Firebase,Flutter,Google Cloud Firestore,如何找到与登录电子邮件匹配的文档 当我尝试使用下面的代码时,Firestore忽略了where子句,只带出学生集合中的所有文档,不管它们是否匹配。 我读过在Firebase控制台中手动添加索引的文章,但我尝试了()但没有成功。代码中是否有错误,或者我没有正确索引它 更新:代码输出:第一次打印是电子邮件,但之后应该只有一次打印是“peV2zNJukJTWKxanR9Cx”- 以及firestore图像中的数据结构: 如果我将'email'变量替换为'henycave@gmail.com在where
where
子句,只带出学生集合中的所有文档,不管它们是否匹配。
我读过在Firebase控制台中手动添加索引的文章,但我尝试了()但没有成功。代码中是否有错误,或者我没有正确索引它
更新:代码输出:第一次打印是电子邮件,但之后应该只有一次打印是“peV2zNJukJTWKxanR9Cx”-
以及firestore图像中的数据结构:
如果我将'email'变量替换为'henycave@gmail.com在where子句中,它起作用
@override
void initState() {
super.initState();
getUserEmail();
getData();
}
getUserEmail() async {
try {
final user = await _auth.currentUser();
if (user != null) {
loggedInUser = user;
email = loggedInUser.email;
print(email);
}
} catch (e) {
print(e);
}
}
getData() async {
var documents = await _firestore
.collection('students')
.where('email', isEqualTo: email)
.getDocuments();
for (var document in documents.documents) {
print(document.data['grade']);
}
}
还有我的pubspec.yaml:
name: school
description: A new Flutter application.
version: 1.0.0+1
environment:
sdk: ">=2.1.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^0.1.2
firebase_core: ^0.4.5
firebase_auth: ^0.16.1
cloud_firestore: ^0.13.7
dev_dependencies:
flutter_test:
sdk: flutter
flutter:
uses-material-design: true
assets:
- images/
名称:学校
描述:一个新的颤振应用。
版本:1.0.0+1
环境:
sdk:“>=2.1.0Firestore仅在传递给compare的参数为null或空时才忽略where子句
您确定在getData()
之前调用了getUserEmail()
,并且email变量实际被赋值了吗
请尝试更正这些,您的问题应该会得到解决
此外,除非比较where
子句中的两个或多个字段,否则不需要索引。Firestore仅在传递给compare的参数为null或空时才会忽略where子句
您确定在getData()
之前调用了getUserEmail()
,并且email变量实际被赋值了吗
请尝试更正这些,您的问题应该会得到解决
另外,除非比较where
子句中的两个或多个字段,否则不需要索引。我最终找到了答案,因为我在initState()中调用了这两个方法,并且这个函数不接受async和Wait关键字,getData()函数在getUserEmail()之前开始执行在email变量上完成电子邮件的保存。因此where子句获得的是未来而不是值。因此,我将两个函数合并为一个函数,以便它们可以正确地等待另一个函数完成。在initState()中调用该函数。我终于找到了答案,因为我在initState()中调用了这两个方法并且该函数不接受异步和等待关键字getData()函数在getUserEmail()之前开始执行在email变量上完成电子邮件的保存。因此where子句获取的是未来而不是值。因此,我将两个函数合并为一个函数,以便它们可以正确等待另一个函数完成。并在initState()中调用该函数我从未见过Firestore忽略查询子句,因此怀疑还有其他问题。您是否可以将问题编辑为:1)打印电子邮件的值,然后包括更新的代码及其输出,2)包括查询返回的不应该是的文档的屏幕截图,3)打印文档ID和电子邮件,并包括更新后的代码及其输出。这些内容加在一起将是一个问题,因此我也建议研究该链接。@FrankvanPuffelen我已经编辑了这个问题,我希望现在可以理解,我期待您对问题的建议1)如果您添加print(email)
(或类似内容)作为getData
中的第一行,它会打印什么?2)如果打印(documents.size)
在查询之后,它会打印什么?我从未见过Firestore忽略查询子句,因此怀疑还有其他问题。您可以将您的问题编辑为:1)打印电子邮件的值,然后包括更新的代码及其输出,2)包括您的查询返回的文档的屏幕截图ldn't be,3)打印文档ID和电子邮件,并包括更新的代码及其输出。这些内容一起将是一个,因此我也建议研究该链接。@FrankvanPuffelen我已经编辑了这个问题,我希望现在可以理解,我期待您对问题的建议1)如果您添加打印(电子邮件)
(或类似的内容)作为getData
中的第一行,它会打印什么?2)如果您print(documents.size)
在查询之后,它会打印什么?我已经编辑了这个问题,现在您可以看到我在getData()之前调用了getUserEmail()email变量不是null,因为print语句打印email我已经编辑了这个问题,现在您可以看到我在getData()之前调用了getUserEmail()email变量不为null,因为print语句打印email非常感谢,你为我节省了很多时间,保重:)非常感谢,你为我节省了很多时间,保重:)