在颤振中同时进行Firebase分页和过滤

在颤振中同时进行Firebase分页和过滤,firebase,flutter,filter,google-cloud-firestore,pagination,Firebase,Flutter,Filter,Google Cloud Firestore,Pagination,我可以从Firebase(Cloud Firestore)查询办公室集合,然后我只需要显示距离用户一定距离(比如20英里)的办公室。我无法使用db.collection('offices')。其中(…)用于此查询 我必须查询所有办公室,然后计算每个办公室与当前用户的距离,如果距离小于20英里,我会为用户列出办公室。但问题是,我的收藏中可能有数百万个办公室,这意味着对于每个用户来说,我读取了数百万个数据,以显示可能只有不到100个办公室在他/她20英里的范围内 这里有两个问题-1)我如何执行此查询

我可以从Firebase(Cloud Firestore)查询办公室集合,然后我只需要显示距离用户一定距离(比如20英里)的办公室。我无法使用db.collection('offices')。其中(…)用于此查询

我必须查询所有办公室,然后计算每个办公室与当前用户的距离,如果距离小于20英里,我会为用户列出办公室。但问题是,我的收藏中可能有数百万个办公室,这意味着对于每个用户来说,我读取了数百万个数据,以显示可能只有不到100个办公室在他/她20英里的范围内


这里有两个问题-1)我如何执行此查询而不必阅读此集合中的所有文档。2) 如何对结果进行分页,以便即使在所需距离内有100个办公室,我仍然希望以10个为一批显示(获取前10个过滤文档,一旦用户滚动到最后,获取下10个文档,依此类推).

您可以使用geolocator包存储办公室的纬度和经度,然后使用where子句过滤位置。 这篇文章包含如何实现geolocator包:

获取并保存每个办公室的地理定位器后,可以使用两个where子句进行查询,如下所示:

// Get user's latitude and longitude from current location and then 
var lat = userLatitude;
var long = userLongitude;

Firestore.instance
    .collection('addresses')
    .where('latitude', isLessThanOrEqualTo: lat)
    .where('longitude', isLessThanOrEqualTo: long)
    .getDocuments()
    .then(snapshots => {
      // Do Stuff here
    });

谢谢你。只有一个问题。当我使用“geo.collection(collectionRef:collectionReference).within(center:center,radius:radius,field:field)”查询地理数据时,它不算作文档读取。对吗?另外,你知道我如何将此查询与常规firebase查询(使用ref.where)相结合,以获得20英里内“打开”字段值为真的办公室吗?如果你有其他问题,你应该单独发布。我认为这不会给我想要的结果。我想要一个用户半径20英里以内的办公室!你的解决方案将给我所有的办公室南部和西部的用户的位置,我猜!