Ограничить результаты GeoFirestore? - PullRequest
0 голосов
/ 11 января 2019

Я бы хотел ограничить результаты 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 голосов
/ 12 января 2019

Таким образом, проблема с этими дополнительными функциями, такими как лимит, заключается в том, что для работы запросов мы агрегируем несколько запросов при выполнении гео-запроса.

Мы создаем массив запросов с геохэшами, которые находятся вокруг выбранной вами области. Таким образом, мы можем применить ограничение к каждому из этих запросов, но при агрегировании к каждому запросу будет применено ограничение, и совокупность будет больше. Итак, на стороне клиента я должен повторно применить предел. Это очень выполнимо, это не очень эффективно.

На данный момент он не поддерживается, но я надеюсь применить его в будущем. Одна вещь, которую вы могли бы сделать, это следующее ...

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);
  });
});

Однако в этом случае к каждому запросу геоквери будет применяться ограничение, а не совокупность. Вы можете повозиться с желаемым лимитным числом, чтобы приблизиться к клиенту. (Вы увидите, что эта функция должным образом интегрируется в феврале)

...