减少读取Firestore的次数

时间:2020-02-19 08:42:28

标签: firebase google-cloud-firestore

我有一个约会类的应用程序(不支持聊天),其中显示与用户匹配特定条件的所有配置文件的列表。我为此使用了实时快照侦听器。

 query.addSnapshotListener(new EventListener<QuerySnapshot>() {
            @Override
            public void onEvent(@Nullable QuerySnapshot snapshot,
                                @Nullable FirebaseFirestoreException e) {
                if (e != null) {
                    return;
                }
                if (snapshot != null && !snapshot.isEmpty()) {
                    List<FeedDetails> feedDetailsList = new ArrayList<>();
                    for (DocumentSnapshot document : snapshot.getDocuments()) {
                        FeedDetails feedDetails = document.toObject(FeedDetails.class);
                        feedDetailsList.add(feedDetails);
                    }
                    feedItemAdapter.updateData(feedDetailsList);
                } 

            }
        });

在个人资料文档中,我有10-12个字段,其中有一个在线/离线信息字段。因此可以说,如果某些配置文件的其他字段没有更改,但在线/离线状态发生了更改,那么侦听器将再次读取该文档。有什么方法可以减少这些读取?

1 个答案:

答案 0 :(得分:2)

我有一个10-12字段,其中包含一个在线/离线信息字段。因此,假设某些配置文件的其他字段没有更改,但在线/离线状态发生了变化,那么侦听器将再次读取该文档。

在Cloud Firestore中,您无法只听文档的一组属性而排除其他属性。这是整个文档,或者什么也没有。因此,如果将此字段online=true更改为online=false,那么您将获得整个文档。

Cloud Firestore侦听器在文档级别触发,并始终返回完整的文档。不幸的是,尽管服务器SDK的select()方法中确实存在此选项,但无法通过客户端SDK仅请求文档的一部分。

如果您不想收到有关特定字段的通知,请考虑添加包含仅包含这些字段的文档的额外集合。因此,请创建额外的集合,其中每个文档仅包含您不需要的数据。这样,您就不会收到在线/离线更改的通知。