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

And*_*oid 7 typescript angular google-cloud-firestore

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

使用角度 5.5.2

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

服务模块

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)
)
Run Code Online (Sandbox Code Playgroud)

上述代码的错误:“QuerySnapshot”类型的参数不能分配给“Team”类型的参数。类型“QuerySnapshot”缺少“团队”类型中的以下属性:internalTeamName、externalTeamName、creatorNumber、teamAdmins、teamMembers

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

public teamArray: Team[] = null;

ngOnInit() {
this.teamArray = this.teamCrudService.loadTeams(this.authService.email);
}
Run Code Online (Sandbox Code Playgroud)

Zac*_*ché 6

如何在(至少)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())
}
Run Code Online (Sandbox Code Playgroud)

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

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


Lea*_*mer 5

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

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