как включить в гео-запросы оба метода 'near' и 'where' с использованием библиотеки geofirestore - PullRequest
1 голос
/ 27 мая 2020

Я пытаюсь добраться до «онлайн» пользователей в радиусе 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
                    })
                }
            })

Возвращает null при использовании обоих методов 'near' и 'where'. Но запрос хорошо работает с такими отдельными методами.

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

Я хочу запросить базу данных firestore обоими способами. Не могли бы вы помочь мне решить эту проблему.

1 Ответ

2 голосов
/ 27 мая 2020

Я нашел ответ. вместо использования 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 => {...). После этого он начал работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...