Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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
如何查询";“附近”&&引用;最新;在firestore中,Android有限制吗?_Android_Firebase_Google Cloud Firestore - Fatal编程技术网

如何查询";“附近”&&引用;最新;在firestore中,Android有限制吗?

如何查询";“附近”&&引用;最新;在firestore中,Android有限制吗?,android,firebase,google-cloud-firestore,Android,Firebase,Google Cloud Firestore,我有一个Android项目,我需要查询附近的项目&这些项目应该按时间排序 基本上,我需要100公里内的文档。按时间排序(字段) 所以我已经检查了Firestore文档,我得到了(将geoHash添加到文档中,然后通过geoHasBounds查询它们),但是有一个问题,如果100公里内有1k个文档,那么它将加载所有不好的文档,那么我如何限制这些不同的查询,只获取25-30个文档,然后再获取25-30个文档 简而言之,这就是我需要的- 当用户向下滚动下一个25个文档时,如何查询100公里半径内最近的

我有一个Android项目,我需要查询附近的项目&这些项目应该按时间排序

基本上,我需要100公里内的文档。按时间排序(字段)

所以我已经检查了Firestore文档,我得到了(将geoHash添加到文档中,然后通过geoHasBounds查询它们),但是有一个问题,如果100公里内有1k个文档,那么它将加载所有不好的文档,那么我如何限制这些不同的查询,只获取25-30个文档,然后再获取25-30个文档

简而言之,这就是我需要的-

当用户向下滚动下一个25个文档时,如何查询100公里半径内最近的25个文档?

这是我的查询代码-

List<GeoQueryBounds> bounds = GeoFireUtils.getGeoHashQueryBounds(center, radiusInM);
    final List<Task<QuerySnapshot>> tasks = new ArrayList<>();
    for (GeoQueryBounds b : bounds) {
         Query newQuery = itemQuery.orderBy("geoHash").startAt(b.startHash).endAt(b.endHash);

        tasks.add(newQuery.get());
    }

    // Collect all the query results together into a single list
    Tasks.whenAllComplete(tasks).........
List bounds=GeoFireUtils.getGeoHashQueryBounds(中心,半径nm);
最终列表任务=新建ArrayList();
对于(GeoQueryBounds b:边界){
Query newQuery=itemQuery.orderBy(“geoHash”).startAt(b.startHash).endAt(b.endHash);
tasks.add(newQuery.get());
}
//将所有查询结果收集到一个列表中
任务。完成时(任务)。。。。。。。。。

您要查找的内容称为。我在这里回答了一个关于Stackoverflow的问题,在这里我解释了一种推荐的方法,通过将查询游标与“limit()方法”相结合,可以对查询进行分页。为了更好地理解,我还建议您看看这个

如果你愿意尝试,请看下面的一篇文章,这将帮助你实现这一目标

编辑:

方法:

返回一个任务,其中包含在所有指定任务完成时成功完成的任务列表


因此,您可以简单地将每个对象转换为所需的对象类型,并相应地对该列表进行分页。不幸的是,这意味着首先要获取所有对象。否则,您可以将这些查询划分为单独的查询,并使用单独的页码进行相应的处理。

对不起,我已经知道这一点,但问题是地理查询并不简单。基本上,若你们点击有问题的解决方案的链接,你们会看到一个半径有多个查询。你们可以用我在回答中解释的相同方式对这些查询分页。关键是将startAfter()方法传递到下一个查询中,即最后一个可见的DocumentSnapshot。是的,我当然可以限制,但问题是我不知道每个查询将返回多少文档,我需要为所有这些查询(加在一起)限制25个文档。假设我得到5个geoHashBounds,那么如果我给每个限制5-5个,然后假设4个边界有1-1个文档,第5个边界有20个文档,那么我将只得到9个文档(1+1+1+1+5),因为没有查询将返回超过5个文档,这是正确的。您无法预先知道查询可能返回多少结果。但这并不重要。您可以请求一定大小的数据页。因此,在这种情况下,您应该创建一个查询来获取半径为100公里的位置,然后根据时间戳对结果进行排序,以获取最新的元素。别忘了创建一个我不认为有一种方法可以在一次查询中获取所有文档,你必须查询所有geoHash边界的文档。我不知道为什么我不能理解你能提供代码吗?我将非常感谢你