1

我正在尝试对云火库进行查询,该云火库应该返回给定地理点半径为 10.5 公里的所有地理点。我正在尝试使用 geofirestore 来实现这一点。我曾尝试使用地理查询,但我找不到返回它的方法或属性。我的问题似乎有一个相当简单的答案,但我对 firebase 和 geofirestore 都是新手。谢谢你。

到目前为止我的代码:

document.addEventListener('DOMContentLoaded', () => {
    const app = firebase.app();
});

var db = firebase.firestore();

db.settings({
    timestampsInSnapshots: true
});

const collectionRef = firebase.firestore().collection('geofirestore');

// Create a GeoFirestore index
const geoFirestore = new GeoFirestore(collectionRef);

const post1 =  db.collection('posts').doc('firstpost');

const test = {lat: 39.369048, long: -76.68229}

const geoQuery = geoFirestore.query({
    center: new firebase.firestore.GeoPoint(10.38, 2.41),
    radius: 10.5,
    query: (ref) => ref.where('d.count', '==', '1')
});

console.log(geoQuery.query());
4

1 回答 1

0

我认为文档可能不清楚,但这就是正在发生的事情。

下面的代码创建一个GeoFirestoreQuery

const geoQuery = geoFirestore.query({
    center: new firebase.firestore.GeoPoint(10.38, 2.41),
    radius: 10.5,
    query: (ref) => ref.where('d.count', '==', '1')
});

如果您想进行地理查询,您将使用事件on侦听器,该key_entered事件将在您的查询中返回文档,请参见此处

但是,您调用的是query返回 Firestore 查询或 CollectionReference 的函数(取决于您在创建或更新查询条件时是否传入了查询函数)。

调用get这个query会绕过所有 GeoFirestore 的魔力,不会为您提供您想要或期望的东西......相反,您会想做这样的事情。

// Store all results from geoqueries here
let results = [];

// Create geoquery
const geoQuery = geoFirestore.query({
    center: new firebase.firestore.GeoPoint(10.38, 2.41),
    radius: 10.5,
    query: (ref) => ref.where('d.count', '==', '1')
});

// Remove documents when they fall out of the query
geoQuery.on('key_exited', ($key) => {
  const index = results.findIndex((place) => place.$key === $key);
  if (index >= 0) results.splice(index, 1);
});

// As documents come in, add the $key/id to them and push them into our results
geoQuery.on('key_entered', ($key, result) => {
  result.$key = $key;
  results.push(result);
});
于 2018-11-06T09:23:17.447 回答