更新firestore数据后显示重复事件,但firestore中的数据本身不重复

Posted

技术标签:

【中文标题】更新firestore数据后显示重复事件,但firestore中的数据本身不重复【英文标题】:Display duplicate events after update firestore data, but the data itself in firestore isn't duplicated 【发布时间】:2018-12-09 01:43:03 【问题描述】:

我有一个 Web 应用程序 (Angular) 和一个移动应用程序 (Ionic)。它们都共享相同的 Firestore 数据。

使用网络应用程序更新现有数据,但 ionic 应用程序显示重复项目(重启移动应用程序后重复项将消失),我在 Firestore 中检查项目数据本身,它已更新且唯一。有人对此有任何线索吗?

这个问题只出现在除了网页应用之外的移动应用上,它们都使用"angularfire2": "^5.0.0-rc.4",

   import  AngularFirestore, AngularFirestoreCollection  from 'angularfire2/firestore';

   this.posts$ = this.db.getRecentPosts().snapshotChanges().pipe(
      map(arr => arr.map(doc => 
          return  id: doc.payload.doc.id, ...doc.payload.doc.data() 
        
      ))
    );

做了研究,看起来(不是 100% 肯定)是一个 angularfire2 问题: AngularFirestoreCollection sometimes returns duplicate of records after inserting a new record

【问题讨论】:

我认为你应该检查一下你是否忘记在某个地方取消订阅。 【参考方案1】:

由于重新启动后重复项消失了,并且其他人也报告了此问题,因此我感觉问题出在AngularFirestore 本身。作为一种解决方法,您可以尝试以下方法:

 import  AngularFirestore, AngularFirestoreCollection  from 'angularfire2/firestore';

   this.posts$ = this.db.getRecentPosts().snapshotChanges().pipe(
      map(arr => arr.reduce((acc, doc) =>  // map -> reduce
        const id = doc.payload.doc.id
        // remove !(id in acc) to get last duplicate
        !(id in acc) && acc[id] =  id, ...doc.payload.doc.data()  
        return acc 
        ,  // reduce seed
      )),
      // you can also Object.values(arr.reduce(...)), but this I find bit more readable
      map(coll => Object.values(coll))
    );

【讨论】:

感谢您的回复。目前,我自己删除重复项。我真的很想知道避免这个问题的最佳解决方案是什么。 你知道了吗?每次我更新一些东西时,它都会在前端重复。这似乎已经以其他方式处理过,不是吗?

以上是关于更新firestore数据后显示重复事件,但firestore中的数据本身不重复的主要内容,如果未能解决你的问题,请参考以下文章

Vue,firestore:合并集合后如何显示 LIVE 数据

如何在flutter的firestore中使用uid更新用户数据

添加数据后,我从 Firestore 获得重复数据。在 React Native 中

Flutter_bloc 从没有 UI 事件的 firestore 获取更新的数据

Flutter 使用 Streambuilder 对数据 Firestore 进行排序

我想从firestore检索当前记录的用户数据,但这显示错误[重复]