2017-10-11 37 views
5

Używam nowego Cloud Firestore w systemie Android. Mam do czynienia z tym problemem w sklepie firewall. Chcę zapytać o dokument, który zawiera identyfikator w polach tablicy.Jak wyszukiwać dokumenty, które zawierają wysłany parametr w Firestore?

na przykład, mam dokument z pola w FireStore zawierający tablicę liczb całkowitych takiego: image1

Więc kiedy mam id 66940, mogę dostać ten dokument oraz inne dokumenty, które zawiera identyfikator bez powrotu inne dokumenty, które nie zawierają identyfikator 66940.


Poza tym podejściu, można również użyć tożsamości (66940), aby wyszukać go w identyfikatorze dokumentu. Moje dokumenty formatu id jest tak:
- 66940_88123
- 12323_66940

Chodzi o to, aby powrócić do dokumentów, które zawierają w swoim ID 66940. Przeczytałem o rozwiązaniu here, ale tak naprawdę nie rozumiem, jak go wdrożyć.

Odpowiedz

5

To jest częste pytanie, dlatego napisali jakąś dokumentację, w jaki sposób pracować z tablicami w chmurze FireStore: https://firebase.google.com/docs/firestore/solutions/arrays

W skrócie, jeśli chcesz zapytać o członkostwo tablicy lepiej jest przechowywać dane jako mapa booleans.

tego Więc zamiast:

{ 
    name: "sam", 
    userGgIds: [12345, 67890] 
} 

Chcesz to:

{ 
    name: "sam", 
    userGgIds: { 
    12345: true, 
    67890: true 
    } 
} 

Następnie można zrobić to zapytanie do wyszukiwania dokumentów, które zawierają identyfikator "12345"

db.collection("users").where("userGgIds.12345", "==", true).get() 
+1

Oczywiście! Chciałbym nawiązać połączenie z referencjami między dokumentami. Ze względu na ich znaczenie i cechy wspólne, warto powtórzyć w dokumentach, że jest to zalecany przypadek użycia dla relacji członkowskich (1: *, *: *). Czas zrobić kilka obrotów: | –