angular - 如何根据属性从firestore中检索用户
问题描述
在我的 Angular 应用程序中,我使用的是 Angularfire2 和 Firestore。
从文档中我知道我可以使用以下命令通过电子邮件“xyz@gmail.com”获取用户(其中 db 是 AngularFirestore 的一个实例):
this.db.collection("users", ref => ref.where('email', '==', "xyz@gmail.com"));
然而,
let user = this.db.collection("users", ref => ref.where('email', '==', "xyz@gmail.com"));
不会在变量“user”中使用电子邮件“xyz@gmail.com”保存用户,而是在整个集合“users”中保存用户。
如何通过电子邮件“xyz@gmail.com”获取用户?然后我怎样才能获得用户的属性(例如,用户的 id)?
更新:
我尝试了以下方法:
给出错误消息,属性“then”在类型 AngularFirestoreCollection 上不存在。
我还尝试了以下方法:
let user = this.db.collection("users", ref => ref.where('email', '==', "xyz@gmail.com"))
.valueChanges()
.pipe(reduce((acc, curr) => curr[0], {}));
这也给出了语法错误。
最后,我只是尝试了这个:
let users = this.db.collection("users", ref => ref.where('email', '==', "xyz@gmail.com"));
let user = users[0];
console.log(user);
这没有给出语法错误。但是,“用户”是未定义的。
更新 2:
我也试过这个:
private async getUser() {
let users = await this.db.collection("users", ref => ref.where('email', '==', "xyz@gmail.com"));
let user = users[0];
console.log(user);
}
但是,“用户”仍然是“未定义的”。
PS:firestore 中确实存在电子邮件“xyz@gmail.com”的用户。
更新 3:
我还尝试了以下方法:
但是,与更新 1 中使用的版本一样,我收到“减少”错误...错误消息显示:
Cannot find name "reduce"
解决方案
let user = this.db.collection("users", ref => ref.where('email', '==', "xyz@gmail.com"));
不会给你一个用户,而是会给你一个具有该电子邮件属性的用户集合(数据库中可能有多个)如果你知道你只有一个我认为你可以使用:
.valueChanges()
.pipe(reduce((acc, curr) => curr[0], {}))
仅获取集合中的第一个元素
推荐阅读
- assembly - MIPS 汇编代码计算字符串中的位数
- excel - 如何比较2张纸中的行,然后将不同的行复制到另一张纸vba
- java - 寻找退出系统或停止代码的方法
- regex - 如何为 apache nutch 正则表达式网站 URL?
- algorithm - 排名 - 最小化成对比较
- python-3.x - 使用 Python ElementTree 在 xml 存档中获取邻居元素
- react-native - 在 React Native 中按下回车时如何禁用在多行 TextInput 中插入新行
- jquery - align button on the right side
- java - 执行/测试一个类
- javascript - React 测试 [Jest] 问题 - 需要域选项