gpt4 book ai didi

Angularfire2 Firestore更新多个文档中的相同字段

转载 作者:行者123 更新时间:2023-12-02 20:30:05 25 4
gpt4 key购买 nike

我在 Firebase Firestore 上存储了一个配置文件表和一个作业表。我正在创建一个 Angular 5 网站。为了节省网络调用,我将用户配置文件名称添加到每个作业文档中。 (不确定 firestore 是否有表链接)。因此,当用户更新他的姓名时,我也必须更新他们的工作文档(不多)。我可以获得具有正确用户 ID 的工作集合。但我无法弄清楚如何在不使用 Observable(一次性调用)的情况下迭代列表并更新一个字段。这是我尝试的迫使我的浏览器进入连续循环的方法

jobsCollection : AngularFirestoreCollection<Job>;
jobDoc: AngularFirestoreDocument<Job>;

jobs: Observable<Job[]>;
job: Observable<Job>;

update(profile: Profile){
this.jobsCollection = this.db.collection('jobs', ref => {
return ref.where('user_id', '==',profile.user_id);
});

this.tracksCollection.valueChanges(item => {

console.log('update this record:', item);

item.forEach(job=> {
console.log('This is the job');
this.jobDoc = this.db.doc(`jobs/${job.id}`);
job.name= profile.name;
this.jobDoc.update(job);
});


});

}

任何帮助将不胜感激,谢谢PK

最佳答案

您需要一个.subscribe()来从this.jobsCollection获取数据并迭代每个数据并更新文档,例如

this.jobsCollection.snapshotChanges().map(changes=>{
return changes.map(a=>{
const data = a.payload.doc.data();
const id = a.payload.doc.id;
return {id, ...data}
})
}).subscribe(items=>{
items.forEach(job=>{
this.db.doc(`jobs/${job.id}`).update({name:profile.name});
})
});

我假设您在 jobs 集合下的每个文档中有一个名为 id 的文件,否则您需要使用 .snapshotChanges() 而不是.valueChanges()

关于Angularfire2 Firestore更新多个文档中的相同字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49084835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com