Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 其中大于或等于firestore中的读取数,且Where Array包含读取数_Java_Android_Google Cloud Firestore - Fatal编程技术网

Java 其中大于或等于firestore中的读取数,且Where Array包含读取数

Java 其中大于或等于firestore中的读取数,且Where Array包含读取数,java,android,google-cloud-firestore,Java,Android,Google Cloud Firestore,这是一个相当普遍的问题,但我找不到任何文件来解释这一点 我使用firestore作为我应用程序的主数据库 我最近实现了一个自动完成系统,通过以下两种方式查询我的firestore(第一种方式捕获部分单词,第二种方式捕获整个单词(如果单词不在句首): db.collection(“id”) 。其中大于或等于(ID,s.toString())。其中小于或等于(ID,s.toString()+“\uF7FF”)。限制(10)。获取() .addOnCompleteListener(新的OnComple

这是一个相当普遍的问题,但我找不到任何文件来解释这一点

我使用
firestore
作为我应用程序的主数据库

我最近实现了一个自动完成系统,通过以下两种方式查询我的
firestore
(第一种方式捕获部分单词,第二种方式捕获整个单词(如果单词不在句首):

db.collection(“id”)
。其中大于或等于(ID,s.toString())。其中小于或等于(ID,s.toString()+“\uF7FF”)。限制(10)。获取()
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
对于(QueryDocumentSnapshot文档:task.getResult()){
String id=document.getString(“id”);
添加(id);
}
}
}
} );
数据库收集(“ID”)
.whererraycontains(“IDArray”,s.toString()).limit(10.get())
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
对于(QueryDocumentSnapshot文档:task.getResult()){
List idsParts=(List)document.get(“IDArray”);
字符串id=TextUtils.join(“,idsParts);
添加(id);
}
}
}
} );
这段代码工作得很好,但是我正在努力理解它的工作方式

假设我的ID集合中有100万个文档。当我使用上面的查询时,它会搜索所有100万个文档并检查每个文档吗?或者更具体地说,这是否意味着它将计为100万次读取,或者最终因为我使用了
.limit(10)
它意味着只使用了10次读取

我这样问是因为这个应用程序很快就会发布,我想知道上面的方法查询起来是否非常昂贵

如果有其他方法来优化查询,我很乐意知道

谢谢

概念很简单:

结果的文档数=已收费的读取操作数

当您使用limit时,您会告诉查询提供指定数量的结果


例如,如果您对100个文档执行查询,而您的查询只满足15个文档,那么您只需支付15个文档的费用。进一步说,如果您使用限制(10),结果将只有10个文档(10次读取)。

那么在我的情况下,如果我查询100万个文档,只有5次,结果将计为5次读取?是否有更深入了解的来源?是的,您只需支付5份文件的费用。以下是有关它的一些详细信息:。也许这里也有:
db.collection( "IDS" )
        .whereGreaterThanOrEqualTo("ID", s.toString() ).whereLessThanOrEqualTo( "ID", s.toString() + "\uF7FF" ).limit(10).get()
        .addOnCompleteListener( new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()) {
                    for (QueryDocumentSnapshot document : task.getResult()) {
                        String id = document.getString( "ID" );
                        ids.add( id );
                    }

                }

            }
        } );

db.collection( "IDS" )
        .whereArrayContains("IDArray", s.toString() ).limit(10).get()
        .addOnCompleteListener( new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()) {
                    for (QueryDocumentSnapshot document : task.getResult()) {
                        List<String> idsParts = (List<String>) document.get( "IDArray" );
                        String id = TextUtils.join( " ", idsParts );
                        ids.add( id);
                    }

                }

            }
        } );