如何将 Firebase 查询快照转换为对象数组



我正在尝试从一组团队中返回选定的团队。似乎我需要将快照转换为团队对象。我该怎么做?有没有更简单的方法将快照转换为数组?我是火力基地/角的新手,所以希望我错过了一些简单的东西。

使用 Angular 5.5.2

export class Team {
internalTeamName: string;
externalTeamName: string;
creatorNumber: number;
teamAdmins: TeamMember[];
teamMembers: TeamMember[];
constructor(code ommitted)
}

服务模块

loadTeams(email){
const teamArray: Team[] = null;
this.firestore.collection('teams', ref => ref.where('teamAdmins', 'array-contains', email))
.get()
.forEach(function(childSnapshot) { 
teamArray.push(childSnapshot);})
.then(
return teamArray )
.catch(
err => console.log(err)
)

上面代码的错误: 类型为"查询快照"的参数不可分配给类型为"团队"的参数。 类型"查询快照"缺少类型"团队"中的以下属性:内部团队名称、外部团队名称、创建者编号、团队管理员、团队成员

函数调用上述函数:调用服务函数时的最佳实践是什么?

public teamArray: Team[] = null;
ngOnInit() {
this.teamArray = this.teamCrudService.loadTeams(this.authService.email);
}

如何在(至少)Firebase 9+ 上将 querySnapshot 转换为数组

TL;DR:尝试使用querySnapshot.docs.map(doc => doc.data())

用法示例:

async function getUsers() {
let querySnapshot = await getDocs(collection(db, 'users'))
return querySnapshot.docs.map(doc => doc.data())
}

querySnapshot.docs返回一个documentSnapshot对象的数组,这些对象有一个返回您要查找的实际值的.data()方法。

到目前为止,从我读到的内容来看,在他们的文档中,他们展示了您可以使用querySnapshot.forEach(doc => {etc.})但我还没有看到他们展示我提到的方法。

.collection().get()不返回数组;它返回一个 QuerySnapshot,它有一个属性.docs,这是一个QueryDocumentSnapshot数组,每个数组都有一个属性.data,这是从文档中读取的数据。

请看一下公共文档 https://firebase.google.com/docs/reference/js/firebase.firestore.CollectionReference

最新更新