【问题标题】:Updating firestore data based on some specific condition in Angular. SnapshotChanges() Issue根据 Angular 中的某些特定条件更新 Firestore 数据。 SnapshotChanges() 问题
【发布时间】:2020-09-13 22:05:14
【问题描述】:

我必须在某些特定条件下实时更新数据。即在我的情况下,我必须根据会话 ID 和用户 ID 更新数据库 cloudfirestore。下面是代码。

let docIdOfNonExistance = this.firestore.collection(
      'testdb',
      (ref_non_user) =>
        ref_non_user
          .where('userId', '>', result.userId)
          .where('sessionId', '==', result.sessionId)
    );

    docIdOfNonExistance.snapshotChanges().subscribe((ref_non_user: any) => {
      console.log(ref_non_user);
      ref_non_user.forEach((doc_list) => {
        this.firestore
          .collection('testdb')
          .doc(doc_list.payload.doc.id)
          .update({ status: 'pending' });
      });
    });

一切正常,实时数据正确更新 但问题是在更新数据后它会自动恢复到以前的状态。并且正在发生多次更新。我也尝试了 unsubscribe() 方法,但是由于 unsubscribe 方法,第二次数据没有实时更新。

另外,我们可以直接使用 docId 进行更新,但这里我必须根据 sessionId 和 userId 进行更新。

请帮助我,以这种方式使用如何自动发生多次触发。 我发现这主要是由于 snapshotChanges() 方法而发生的。

【问题讨论】:

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


    【解决方案1】:

    最简单的方法可能是将take(1) 添加到链中:

    docIdOfNonExistance.take(1).snapshotChanges().subscribe((ref_non_user: any) => {
      ...
    

    从我可以从文档中确定,这也应该有效:

    docIdOfNonExistance.get().subscribe((ref_non_user: any) => {
      ...
    

    如果它确实有效,我更喜欢这种语法,因为它更接近底层 JavaScript SDK 的执行方式。

    【讨论】:

    • 嗨@Frank van Puffelen,感谢您的回答,但不幸的是,他们都不适合我。
    猜你喜欢
    • 2019-11-07
    • 1970-01-01
    • 2022-07-29
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 2011-11-29
    • 2022-01-22
    • 2021-08-02
    相关资源
    最近更新 更多