Comment utiliser la requête Firebase equalTo (value, key)?
Comme un débutant dans firebase j'ai essayé d'imiter une sorte de "clause where" demande pour récupérer le portefeuille de l'utilisateur dans ce cas simple d'utilisation:
User
48bde8f8-3b66-40bc-b988-566ccc77335c
email: "[email protected]"
username: "userTest1"
UserWallet
F4PvtvNT2Z
coins: 26
someList
elemet1
elemet2
user: "48bde8f8-3b66-40bc-b988-566ccc77335c"
J'ai d'abord essayé de code de ma requête comme ceci:
Firebase root = new Firebase("https://myApp.firebaseio.com/");
Firebase ref = root.child("UserWallet");
Query query = ref.equalTo("48bde8f8-3b66-40bc-b988-566ccc77335c", "user");
Le résultat était nul, j'ai Donc écrit cette requête:
Query query = ref.orderByChild("user").equalTo("48bde8f8-3b66-40bc-b988-566ccc77335c", "user");
Résultat a été nul à nouveau. La seule façon de récupérer le porte-monnaie a été avec cette requête:
Query query = ref.orderByChild("user").equalTo("48bde8f8-3b66-40bc-b988-566ccc77335c");
Donc dois-je toujours utiliser fr "orderByChild()" de la requête avant de l'utiliser "equalTo()"?
Et donc, quel est le but de la requête "equalTo(Chaîne de valeur, Chaîne de clé)" comparer "equalTo(Chaîne de valeur) depuis la deuxième fonctionne correctement?
source d'informationauteur ThierryC
Vous devez vous connecter pour publier un commentaire.
Il y a quelques cas limites qui n'ont pas besoin d'un
orderBy...()
mais en général, vous aurez besoin d'unorderBy...()
avant une opération de filtrage (equalTo()
startAt()
endAt()
).Je vous recommande fortement de lire d'abord la Firebase guide de programmation pour Android (ic à 95% de celui-ci s'applique à Java ordinaire trop). Quelques heures passées dans ce guide, permettra de sauver des dizaines de questions ici. Par exemple: c'est le la section sur les requêtes.
Après la lecture, vous pouvez aussi lire ce guide sur La Modélisation De Données NoSQL. Il couvre de nombreux éléments communs dans NoSQL de la modélisation de données et vous permettra de réaliser très tôt que d'essayer de la carte des requêtes SQL à une base de données NoSQL est une idée logique, mais rarement une bonne idée.
Mon initiale (sans aucune idée sur vos cas d'utilisation, à l'exception de "j'ai besoin d'être en mesure de trouver le porte-monnaie pour un utilisateur") modèle:
Dans le modèle ci-dessus, j'ai inversé le
Wallet
etUser
sousUserWallet
de sorte que la recherche de la portefeuille(s) pour un utilisateur devient plus facile.Noter qu'il n'ya pas de requête en jeu ici, afin que le chargement sera tout aussi rapide peu importe combien d'utilisateurs que vous avez dans votre base de données.
Ou alternativement:
Nous avons maintenant complète aplatie de la structure. Pour déterminer le portefeuille d'un utilisateur, vous accédez à
UserWaller/$uid
et puis le charger à chaque portefeuille deWallets/$walletid
. Il peut être un peu plus de code, mais ça va être extrêmement efficace (puisque il n'y a pas de requêtes).Vous pouvez utiliser des Requêtes imbriquées pour cette.! si vous avez plusieurs id aléatoire, vous pouvez comparer facilement les.!
DatabaseReference de référence = FirebaseDatabase.getInstance().getReference();