1

我试图接近半径为 25 公里的“在线”用户,我正在使用以下代码使用 geofirestore-js 插件(https://github.com/MichaelSolati/geofirestore-js)执行地理查询

const geofirestore = new GeoFirestore(Firebase.firestore());
const geocollection = geofirestore.collection('location');
const query = geocollection.near({ center: coordinates, radius: 25 }).where('status' , '==' , 'online');
        query.onSnapshot(querysnapshot => {
            let nearByContact = []
            querysnapshot.docs.forEach((change) => {
                if (change.id !== store.user.uid) {
                    nearByContact.push({
                        coordinate: {
                            latitude: change.data().coordinates._latitude,
                            longitude: change.data().coordinates._longitude,
                        },
                        title: change.data().name,
                        description: change.distance.toFixed(2) + " km away",
                        image: change.data().avatarUrl,
                        profileId: change.id
                    })
                }
            })

当同时使用 'near' 和 'where' 方法时,它返回 null。但是该查询适用于像这样的单个方法。

const query = geocollection.near({ center: coordinates, radius: 25 })
        query.onSnapshot(querysnapshot => {.....

我想通过这两种方法查询firestore db你能帮我解决这个问题吗?

4

1 回答 1

2

我找到了答案。而不是在上面的查询中使用 query.onSnapshot我将其更改为 query.get().then(querysnapshot => ...

然后突然错误出现在调试控制台上,说它需要Firestore索引

Error: [firestore/failed-precondition] The query requires an index. You can create it here: ......

然后我在 Firestore 中创建了索引并恢复了我对查询所做的更改(更改query.get().then(querysnapshot => {...query.onSnapshot(querysnapshot => {...).. 之后它开始工作

于 2020-05-27T17:57:21.650 回答