限制GeoFirestore的结果?

时间:2019-01-11 16:05:01

标签: firebase google-cloud-firestore geofirestore

我想限制GeoFirestore结果的结果,类似于Firestore中的功能。我试图以各种方式在查询上使用limit(),但是收到没有限制功能的错误。这不可能吗?

  const geoFirestore = new GeoFirestore(firebase.firestore());
  const geoCollectionRef = geoFirestore.collection('locations');

  const query = geoCollectionRef.near({
    center: new firebase.firestore.GeoPoint(39.76068, -104.98471),
    radius: 10
  });

  query.get().then((value = GeoQuerySnapshot) => {
    value.docs.forEach(doc => {
      console.log(doc)
    })
  })

1 个答案:

答案 0 :(得分:0)

因此,这些附加功能(例如限制)的问题在于,为了使查询正常工作,我们在执行地理查询时会汇总多个查询。

我们创建一个查询数组,其中包含您所选区域周围的地理哈希。因此,我们可以将限制应用于每个查询,但是在汇总时,每个查询都将受到限制,并且汇总将更大。因此,在客户端,我必须重新应用该限制。这是非常可行的,效率不是很高。

目前尚不支持,但我希望将其应用到未来。您可以可以做的一件事是...

import * as firebase from 'firebase';
import { GeoQuery, GeoQuerySnapshot } from 'geofirestore';

const collection = firebase.firestore().collection('somecollection');

// APPLY LIMIT HERE
const limitQuery = collection.limit(50);

const query = new GeoQuery(limitQuery).near({
  center: new firebase.firestore.GeoPoint(39.76068, -104.98471),
  radius: 10
});

query.get().then((value: GeoQuerySnapshot) => {
  value.docs.forEach(doc => {
    console.log(doc);
  });
});

但是,在这种情况下,地理位置查询的每个查询都将应用限制,而不是汇总。您可以修改所需的限制数,以便在客户端获得更多收益。 (您会在2月的某个时间看到此功能的正确集成)