【发布时间】:2021-01-07 11:58:31
【问题描述】:
如何找到与登录邮箱匹配的文档?
当我尝试使用下面的代码时,Firestore 忽略了 where 子句,并且只是将所有文档带到学生集合中,无论它是否匹配。
我已经读过在 Firebase 控制台中手动添加索引是可行的,但我试过了(screenshot of the console)但没有运气。代码有问题还是我没有正确索引?
更新:代码的输出:第一个打印是电子邮件,但之后应该只有一个打印是 'peV2zNJukJTWKxanR9Cx'- 以及firestore图像中的数据结构:
如果我在 where 子句中用 'henycave@gmail.com' 替换 'email' 变量,它也可以工作。
@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/
【问题讨论】:
-
我从未见过 Firestore 忽略查询子句,所以怀疑还有其他事情发生。您能否将您的问题编辑为:1)打印
email的值,然后包括更新后的代码及其输出,2)包括您的查询返回的不应该返回的文档的屏幕截图,3)打印文档 ID 和电子邮件,并包括更新的代码及其输出。这些加在一起就是minimal, complete, verifiable example,所以我也建议研究一下这个链接。 -
@FrankvanPuffelen 我已经编辑了这个问题,我希望它现在可以理解,我期待你对这个问题的建议
-
1) 如果你在
getData的第一行添加print(email)(或类似的东西),它会打印什么? 2)如果你在查询之后print(documents.size),它会打印什么?
标签: firebase flutter google-cloud-firestore