我在这里什么都没找到。我的问题是如何更新AngularFire中clausule中返回的文档:
constructor(private db: AngularFirestore) { }
var path = this.db.collection('users').doc('type').collection('customer')
.ref.where('name', '==', 'roger');如何更新此用户?
var query = path.set/update..? 不起作用。
发布于 2018-02-15 19:26:40
尝试这样做,查询将给出获得id和执行更新所需的列表。
const query = this.db.collection('users').doc('type').collection('customer', ref => ref.where('name', '==', 'roger'));
query.snapshotChanges().map(changes => {
changes.map(a => {
const id = a.payload.doc.id;
this.db.collection('users').doc('type').collection('customer').doc(id).update({})
})
}).subscribe();发布于 2019-11-22 13:15:48
我不明白之前的答案是如何被接受的,因为这个行为是错误的,并且以无限循环结束(snapshotChanges()触发器update(),它再次触发订阅它的snapshotChanges() )。而且,这个angularfire synatx已经过时了,所以我将指出一个不同的方法。
要实现OP正在寻找的行为,最佳实践是将文档ID存储在文档本身中。在创建项时,add()返回一个DocumentReference,其中包括刚刚插入的项的ID。
一个实例是:
create(user) {
return new Promise<any>((resolve, reject) => {
this.db
.collection('users')
.doc('type')
.collection('customer')
.add(user)
.then(res => {
this.updateUserId(res.id);
}, err => reject(err));
});
}
updateUserId(id: string) {
return this.db
.collection('users')
.doc('type')
.collection('customer')
.doc(id)
.set({ id: id }, { merge: true });
}在这种情况下,将创建用户,然后立即更新user对象的user字段(因为只有在插入后才可用Firestore )。现在,用户可以通过用户的文档ID轻松地更新。
https://stackoverflow.com/questions/48809632
复制相似问题