Angular Firebase-如何在Firestore中向文档添加属性?

时间:2019-01-08 14:22:30

标签: angular typescript firebase google-cloud-firestore angularfire2

我对角度火力解决方案有疑问。

我想做的是向Firestore文档中已经存在的属性添加一个属性。

我的用户界面看起来像这样

export interface User {
    email: string;
    uid: string;
    photoURL?: string;
    displayName?: string;
    teams?: string[];
}

我想创建一个团队并将该团队ID添加到现有User对象中的teams数组中。

我不想获取所有用户数据,而只是在该字段中输入一个新值。

有可能吗?也许您对如何更有效地执行此操作有一些建议?

团队界面看起来像这样

export interface Team {
    name: string;
    description?: string;
    admin?: string; // = creator - first user
    members?: string[]; // array of users UIDs.
    boards?: string[]; // array of board docs id.
} 

负责添加团队的组件只是一种表单,所以我尝试了“ onSubmit()”,但我不知道如何将团队文档ID放入用户对象。

onSubmit(form: NgForm) {
    const newTeam: Team = {
        name: form.value.name,
        description: form.value.description,
        admin: this.auth.currentUserId,
        members: [this.auth.currentUserId],
    };
    const userRef: AngularFirestoreDocument<any> = this.afs.doc(
        `users/${this.auth.currentUserId}`
    );
    let teamRefId = '';
    this.afs.collection('teams').add(newTeam).then((docRef) => teamRefId = docRef.id);
    this.router.navigateByUrl('/dash');
}

有什么想法吗?也许这应该是某种散布运算符,但是我不想再次获取用户对象并将其发布回firestore,而只是更新该字段...

1 个答案:

答案 0 :(得分:1)

您可以通过以下操作更新文档:

let teamArray = []; // if not excisting.
teamArray.push(teamRefId); // or just add it if it's.
userRef.update({teams: teamArray});

除了团队以外,更新不会更改任何其他内容。如果团队不存在,则会添加该团队。