首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularFire更新->

AngularFire更新->
EN

Stack Overflow用户
提问于 2018-02-15 14:31:25
回答 2查看 3.5K关注 0票数 2

我在这里什么都没找到。我的问题是如何更新AngularFire中clausule中返回的文档:

代码语言:javascript
复制
constructor(private db: AngularFirestore) { }

var path = this.db.collection('users').doc('type').collection('customer')
.ref.where('name', '==', 'roger');

如何更新此用户?

代码语言:javascript
复制
var query = path.set/update..? 

不起作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-15 19:26:40

尝试这样做,查询将给出获得id和执行更新所需的列表。

代码语言:javascript
复制
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();
票数 1
EN

Stack Overflow用户

发布于 2019-11-22 13:15:48

我不明白之前的答案是如何被接受的,因为这个行为是错误的,并且以无限循环结束(snapshotChanges()触发器update(),它再次触发订阅它的snapshotChanges() )。而且,这个angularfire synatx已经过时了,所以我将指出一个不同的方法。

要实现OP正在寻找的行为,最佳实践是将文档ID存储在文档本身中。在创建项时,add()返回一个DocumentReference,其中包括刚刚插入的项的ID。

一个实例是:

代码语言:javascript
复制
 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轻松地更新。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48809632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档