Wydawało mi się, że czytałem, że w nowym Firebase Firestore możesz wysyłać zapytania do podkolekcji, ale nie widzę żadnych przykładów. Na przykład mam konfigurację Firestore w następujący sposób:
- Tańce [kolekcja]
- danceName
- Piosenki [kolekcja]
- Nazwa piosenki
Jak mogę zapytać „Znajdź wszystkie tańce, w których songName == 'X'”
firebase
google-cloud-firestore
Nelson.b.austin
źródło
źródło
Odpowiedzi:
Aktualizacja 2019-05-07
Dzisiaj udostępniliśmy zapytania o grupy kolekcji , które umożliwiają wykonywanie zapytań dotyczących podkolekcji.
Na przykład w internetowym SDK:
Dopasowałoby to dokumenty w każdej kolekcji, w której ostatnią częścią ścieżki do kolekcji jest „Utwory”.
Twoje pierwotne pytanie dotyczyło znalezienia tańców których songName == 'X', a to nadal nie jest bezpośrednio możliwe, jednak dla każdej pasującej piosenki możesz załadować jej rodzica.
Oryginalna odpowiedź
To funkcja, która jeszcze nie istnieje. Nazywa się to „zapytaniem o grupę kolekcji” i umożliwia odpytywanie wszystkich piosenek niezależnie od tego, który taniec je zawiera. Jest to coś, co zamierzamy wspierać, ale nie mamy konkretnego harmonogramu, kiedy to nadejdzie.
Alternatywną strukturą w tym momencie jest uczynienie z piosenek kolekcji na najwyższym poziomie i sprawienie, by taniec był częścią własności piosenki.
źródło
AKTUALIZACJA Teraz Firestore obsługuje zawartość tablic
Posiadanie tych dokumentów
zrób to w ten sposób
@ Nelson.b.austin Ponieważ firestore jeszcze tego nie ma, proponuję mieć płaską konstrukcję, co oznacza:
Mając to w ten sposób, możesz to zrobić:
Mam nadzieję, że to pomoże.
źródło
songName_Title3: false
przydaje? jeśli się nie mylę, można go użyć tylko do wyszukiwania tańców, które nie mają określonej nazwy utworu, przy założeniu, że potrzebujemy,songName_Title3: false
abydances.where("songName_"+songTitle, "==", false);
zwrócić takie wyniki, nie ma sensu, aby każdy taniec miał flagi logiczne dla każdej możliwej piosenki nazwa ...A co, jeśli przechowujesz utwory jako obiekt, a nie jako zbiór? Każdy taniec jako, z piosenkami jako polem: wpisz Obiekt (nie zbiór)
wtedy możesz zapytać o wszystkie tańce za pomocą aNameOfASong:
źródło
UPDATE 2019
Firestore udostępnił zapytania grupowe dotyczące kolekcji. Zobacz odpowiedź Gila powyżej lub oficjalną dokumentację dotyczącą zapytania grupy kolekcji
Poprzednia odpowiedź
Jak stwierdził Gil Gilbert, wydaje się, że obecnie trwają prace nad zapytaniami grupowymi . W międzyczasie prawdopodobnie lepiej jest używać kolekcji na poziomie głównym i po prostu łączyć te kolekcje za pomocą identyfikatorów UID dokumentu.
Dla tych, którzy jeszcze nie wiedzą, Jeff Delaney ma kilka niesamowitych przewodników i zasobów dla każdego, kto pracuje z Firebase (i Angular) w AngularFirebase .
Relacyjne modelowanie danych Firestore NoSQL - tutaj omawia podstawy strukturyzacji NoSQL i Firestore DB
Zaawansowane modelowanie danych w Firestore na przykładzie - są to bardziej zaawansowane techniki, o których warto pamiętać. Świetna lektura dla tych, którzy chcą przenieść swoje umiejętności w Firestore na wyższy poziom
źródło
NOWA AKTUALIZACJA 8 lipca 2019:
źródło
Zawsze możesz wyszukiwać w ten sposób: -
źródło
źródło
źródło
Lepiej byłoby użyć płaskiej struktury danych.
Dokumenty określają zalety i wady różnych struktur danych na tej stronie .
W szczególności o ograniczeniach struktur z podkolekcjami:
W przeciwieństwie do rzekomych zalet płaskiej struktury danych:
źródło
Znalazłem rozwiązanie. Proszę to sprawdzić.
Następnie możesz zobaczyć dane, reguły, indeksy, karty Użycie w swoim Cloud Firestore na console.firebase.google.com. Na koniec powinieneś ustawić indeksy w zakładce indeksy.
Wpisz tutaj identyfikator kolekcji i jakąś wartość pola. Następnie wybierz opcję grupy kolekcji. Ciesz się tym. Dzięki
źródło
Pracuję z Observables tutaj i opakowaniem AngularFire, ale oto jak udało mi się to zrobić.
To trochę szalone, wciąż uczę się o obserwowalnych i prawdopodobnie przesadziłem. Ale to było fajne ćwiczenie.
Kilka wyjaśnień (nie ekspert RxJS):
in
zapytania.Skopiowałem, wkleiłem mój kod i zmieniłem nazwy zmiennych na twoje, nie jestem pewien, czy są jakieś błędy, ale dla mnie działało dobrze. Daj mi znać, jeśli znajdziesz jakieś błędy lub możesz zasugerować lepszy sposób przetestowania go przy użyciu fałszywego Firestore.
źródło