当前位置: 首页 > 知识库问答 >
问题:

Android firestore多次使用“Where to()”会导致成本高昂吗?

仲孙信瑞
2023-03-14

我正在做一个功能,按用户的地区和MBTI分类。

这是一个代码。

private void EventChangeListener() {
    //firestore.collection("Users").orderBy("time",Query.Direction.DESCENDING).limit(50)
    firestore.collection("Users").orderBy("time",Query.Direction.DESCENDING).limit(50)
            .whereEqualTo("gender","여자")
            .whereEqualTo("mbti","ENTP")
            .addSnapshotListener(new EventListener<QuerySnapshot>() {
                @Override
                public void onEvent(@Nullable QuerySnapshot value, @Nullable FirebaseFirestoreException error) {
                    if(error != null){

                        if(progressDialog.isShowing()){
                            progressDialog.dismiss();
                        }

                        Log.e("Firestore error",error.getMessage());
                        return;

                    }

                    for (DocumentChange dc : value.getDocumentChanges()){

                        if (dc.getType() == DocumentChange.Type.ADDED){
                            userArrayList.add(dc.getDocument().toObject(User.class));
                        }

                        myAdapter.notifyDataSetChanged();
                        if(progressDialog.isShowing()){
                            progressDialog.dismiss();
                        }
                    }

                }
            });
}

像这样的whereEqualTo()。whereEqualTo()。Where equalto()会导致大量成本??

如果这是正确的,那么还有其他方法吗?

共有1个答案

白智
2023-03-14

您需要支付与查询匹配并返回的文档数。查询子句的数量不影响成本。使用更多的过滤器,如whyEqualTo(). hyEqualTo(). hyEqualTo()将理想地减少匹配的数量和成本更低。

例如,如果你有一个50家餐厅的集合,并且你在“城市”字段中使用了1whereEqualTo,那么它将返回,并且只对该城市中存在的餐厅收取N的费用。如果在“评级”中添加另一个whereEqualTo,则匹配数可能甚至少于N。

 类似资料:
  • TL;DR: Windows控制台中没有更新结果。在空闲时执行良好。即使Windows控制台没有更新,程序也在执行。 背景 上面的代码只是一个测试文件,看看控制台中的打印是否在所有程序中停止,而不是我正在运行的程序。实际上,我的程序打印到控制台,看起来像: 其中不是真的,但我在这里键入的只是向您展示在控制台窗口中发送到该行的内容。当我的程序继续时,它会增加: 每次覆盖时。我使用ANSI转义字符和相

  • 我有以下图像标记使用和属性来插入响应图像: 据我所知,我只是告诉浏览器我所有可用的图像大小,它应该只下载基于视口大小的最合理的大小,等等。如果我将浏览器窗口(Chrome)调整为较小并刷新页面,则网络选项卡告诉我,它将下载我期望的图像(在本例中为800px),加上最大的图像(我从属性中假设)。 我在使用picturefill.js和不使用picturefill.js的情况下都试过,我在OS X 1

  • 以下操作会在运行时导致异常: java.lang.VerifyError:操作数堆栈上的类型错误异常详细信息:location:com/sun/net/httpserver/spi/httpserverprovider$1.run()ljava/lang/object;@27:invokestatic原因:类型“sun/net/httpserver/defaulthttpserverprovide

  • 我第一次尝试React钩子,一切似乎都很好,直到我意识到当我获取数据并更新两个不同的状态变量(数据和加载标志)时,我的组件(数据表)会呈现两次,尽管对状态更新器的两次调用都发生在同一个函数中。下面是我的api函数,它将两个变量都返回到我的组件中。 在普通的类组件中,您只需调用一次来更新状态,状态可能是一个复杂的对象,但“挂钩方式”似乎是将状态拆分为更小的单元,其副作用似乎是在单独更新时多次重新呈现

  • 问题内容: 我的要求: 确定的前10个帐户,并按帐号升序排列。 询问: 痕迹: 指数: 该说,在列。 强制扫描的费用从3855降低至11092 表中的总行数为632667; 以上都是测试区域的结果。生产实际上是数量的两倍。 我的数据库是Exadata,Quarter RAC。运行Oracle 11g R2。该数据库功能强大到可以立即执行,但是DBA不愿使用13M的tempSpc。商业报告该报告的频

  • 问题内容: 我有一个经典的Java EE系统,具有JSF的Web层,用于BL的EJB 3和用于对DB2数据库进行数据访问的Hibernate 3。我在以下情况下苦苦挣扎:用户将启动一个过程,该过程涉及从数据库中检索大型数据集。检索过程花费一些时间,因此用户不会立即收到响应,变得不耐烦,并打开新的浏览器并再次启动检索,有时是多次。EJB容器显然没有意识到第一次检索不再相关的事实,并且当数据库返回结果