Ponieważ baza ogniowa nie obsługuje indeksowania przestrzennego, używam geohash, które ktoś tutaj zaleca. Geohash używa znaków, aby znaleźć w pobliżu.Jak wyszukiwać w Firebase klucze odpowiadające prefiksowi ciągów znaków
Więc powiedzmy mam w22qt4vhye1c
w99qt4vdf4vc
w22qt4vhzerct
geohash sklep w Firebase i chcę tylko zapytać, która geohash blisko w22qt4
.
Jak to zrobić?
Wiem, że firebase ma startAt. Próbowałem, ale nie działałem.
UPDATE
Przechowywanie geohash do Firebase
//Encode lat lng, result w22qt4vhye1c3
var geoHashLatLng = encodeGeoHash(lat,lng);
firebaseRef.child('/geohash/' + geoHashLatLng).set(id);
więc w json
root
- geohash
- w22qt4vhye1c3
- id
- z99qt4vdf4vc
- w22qt4vhzerct
Moje pytanie tutaj. Po prostu chcę zapytać geohash, które zaczynają się od znaków w22qt4
. Czy możemy to zrobić w bazie ogniowej?
UPDATE 2 startAt()
wydaje się nie ze znaków zapytania zacząć ...
Przykład: Mam następujący gehash
geohash węzła
geohash
- a123
- a333
- b123
- c123
- d123
z następującego kodu
var firebaseRef = new Firebase('https://test.firebaseio.com');
var query = firebaseRef.child('/geohash').startAt(null, 'a');
query.on('child_added', function(snapshot) {
console.log(snapshot.name());
});
dostanie skutkuje
startAt(null, 'a') //return a123, a333, b123, c123, d123
startAt(null, 'c123') //return c123, d123
startAt(null, 'd') //return d123
Moje oczekiwanych rezultatów
startAt(null, 'a') //return a123, a333
startAt(null, 'c123') //return c123
startAt(null, 'd') //return d123
Zgaduję, startAt() będzie kwerendy 26 litery alfabetu w kolejności, ale nie pasujące. Co mogę zrobić w firebase, aby uzyskać powyżej oczekiwane wyniki?
Czy możesz podać fragment kodu, który próbujesz, aby zapewnić bardziej znaczącą informację zwrotną? –
@AndrewLee Cześć, właśnie zaktualizowałem moje pytanie, proszę spojrzeć. – vzhen
Możesz użyć "endAt", aby zakończyć na konkretnym klawiszu. Zobacz zmiany w moim wpisie poniżej. –