【问题标题】:How to limit data returned by Firestore's onSnapshot listener?如何限制 Firestore 的 onSnapshot 监听器返回的数据?
【发布时间】:2019-11-04 23:10:26
【问题描述】:

在 react-native 聊天应用程序项目的上下文中,我正在使用 firebase.firestore().collection("conversations").where("members", "array-contains", {email}).onSnapshot( ... )。 此监听器位于我的收件箱componentDidMount()

每次应用启动时,都会返回整个查询结果集,即使没有任何新内容。如何将此侦听器的结果限制为仅从上次从 Firestore 读取时发生的变化?我已经查看了redux-persist,但我不确定这将如何限制onSnapshot 的结果集。

主要目标是最大限度地减少潜在的极端 Firebase 费用。如果不能通过 onSnapshot 完成,还有哪些其他选项可以保持实时功能?我知道实时数据库对存储而不是读取/写入/删除的收费

【问题讨论】:

    标签: firebase google-cloud-firestore


    【解决方案1】:

    无需迁移到 Firebase 的实时数据库。在最坏的情况下(有大量数据的屏幕),结合 redux-persist 和这个 firestore 查询可以节省主要的 firestore-read-saving:

    export const inboxLoadTest = (email, startAfter) => {
      return dispatch => {
        dispatch({ type: types.INBOX_LOADING });
        firebase
          .firestore()
          .collection("conversations")
          .where("members", "array-contains", email)
          .orderBy("lastMsgTime")
          .startAfter([startAfter])
          .onSnapshot(
            querySnapshot => {
              let conversations = [];
              querySnapshot.forEach(queryDocumentSnapshot => {
                const membersArr = queryDocumentSnapshot.get("members");
                let conversation = {
                  id: queryDocumentSnapshot.id,
                  conversant:
                    membersArr[0] === email ? membersArr[1] : membersArr[0],
                  lastMsgTime: queryDocumentSnapshot.get("lastMsgTime")
                };
                conversations.push(conversation);
              });
              dispatch(loadInboxSuccess(conversations));
            },
            errorObject => {
              dispatch(loadInboxError(errorObject.message));
            }
          );
      };
    };
    

    一旦数据被加载,redux-persist 将保存到 asyncstorage 等应用程序重新加载,上面的监听器只会触发存储在 redux/asyncstorage 中的最后一条消息之后收到的消息,而不是整个消息集合,保存在结果集上,因此在 Firebase 计费上

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 1970-01-01
      • 2021-03-30
      • 2019-09-20
      • 2019-12-07
      相关资源
      最近更新 更多