Как отфильтровать данные коллекции Firestore с помощью функции (для фильтрации расстояний) - PullRequest
0 голосов
/ 04 декабря 2018

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

Предположим, что имелась некоторая коллекция документов Firestore формы

{
  pointOfInterest: "Some string label"
  longitude: -100.123
  latitude: 50.456
}

Также есть некоторый код, который извлекает гео-координаты пользователя (в моем случае, черезact-native), поэтому что-то вроде

const getCurrentLatLong = () => {
    // do some stuff, then...
    return { latitude: someNumber, longitude: someOtherNumber }
}

Что в конечном итоге хотелось бы сделать, так это запуститьчто-то вроде

let currentLocation = getCurrentLatLong()
let filteredSet = firebase
    .firestore()
    .collection('MyCollection')
    // filtering each individual document 
    .filter(function (document, currentLocation) {
         let docLat = document.latitude
         let docLong = document.longitude
         return distance(
             {latitude: docLat, longitude: docLong},
             currentLocation) 
             < SOME_CONST_DISTANCE
     })

Так что в итоге получится несколько отфильтрованных наборов всех документов в коллекции, которые на некотором расстоянии от currentLocation меньше SOME_CONST_DISTANCE.

Некоторое приближение к Google привело к некоторым потенциальным отправным точкам(https://stackoverflow.com/a/45359952/8236733 и https://firebase.google.com/docs/reference/js/firebase.database.Query#on),, но не совсем уверен, как использовать то, что показано в ссылках. Буду признателен за любые советы или документы о том, как этого добиться.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Таким образом, как было сказано ранее, Firestore не поддерживает собственные гео-запросы.Это немного постыдный плагин для некоторых программ с открытым исходным кодом, над которыми я работал ...

https://github.com/mbramwell1/GeoFire-Android

Это позволяет вам выполнять стандартные запросы Firestore, но также добавляет ввозможность поиска по местоположению.Посмотрите на это, он может делать то, что вы хотите.

0 голосов
/ 04 декабря 2018

Нет способа передать функцию в Cloud Firestore, которую она затем использует для фильтрации документов, которые она возвращает.Вам либо нужно передать статические значения (например, широту и долготу, которые вы хотите вернуть), либо вам нужно будет прочитать все документы и выполнить фильтрацию с помощью функции на стороне клиента.

То, что вы пытаетесь сделать, этоизвестный как гео-запрос: возврат документов на основе их расстояния до известной точки.К сожалению, эта функциональность еще не встроена в Cloud Firestore, хотя она поддерживает тип данных с географической точкой .Можно создать его самостоятельно, хотя вы должны понимать, что такие запросы в настоящее время довольно неэффективны.

Чтобы узнать больше об этом:

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