Si nous interrogeons des données de Firebase sur une clé pour un nœud enfant, télécharge-t-il tout le nœud enfant et filtre les données dans l'application ou télécharge-t-il les données spécifiques de la requête? c'est-à-dire les données filtrées

String myUserId = getUid();
Query myTopPostsQuery = databaseReference.child("user-posts").child(myUserId).orderByChild("starCount");
myTopPostsQuery.addChildEventListener(new ChildEventListener() {});

myTopPostsQuery triera les données en fonction de starCount et je recevrai des données dans le addChildEventListener() Je veux savoir si ces données sont filtrées dans mon application après avoir reçu ou si mon application télécharge uniquement les données filtrées données de Firebase.

2
Sushant Garg 26 avril 2017 à 16:50

3 réponses

Meilleure réponse

Si vous utilisez un filtre dans votre requête, vous téléchargerez les données spécifiques à la requête sans aucune opération exécutée côté client. Garde en tête que:

  • Vous ne pouvez utiliser qu'une seule méthode de tri à la fois. L'appel d'une méthode de tri à plusieurs reprises dans la même requête génère une erreur.

  • Vous pouvez combiner plusieurs fonctions de limite ou de plage. Par exemple, vous pouvez combiner les méthodes startAt () et endAt () pour limiter les résultats à une plage de valeurs spécifiée.

Pour toute autre information, consultez ici

1
Bronx 26 avril 2017 à 14:33

Vous obtenez les données déjà filtrées. Lorsque vous utilisez une requête, disons, limitToLast(10) vous n'obtenez que ces 10 éléments. Cela se produit également dans votre cas avec orderByChild("starCount"). Dans votre SnanpShot, vous ne trouverez que ces éléments filtrés. Veuillez consulter le document officiel pour plus de détails.

J'espère que cela aide.

1
Alex Mamo 26 avril 2017 à 13:59

Sur la base du code que vous avez collé ici, votre requête récupérera simplement tous les messages pour le chemin de la base de données user-posts/<id> avec une manière ordonnée, ce qui signifie qu'il n'y a pas de filtre. Mais vous récupérerez toujours tous les messages disponibles sous le chemin que vous interrogez. Il peut s'agir d'un "semi-filtre" car il ne trouvera que les messages qui incluent le champ starCount

La meilleure chose à faire est de filtrer pendant votre requête afin de récupérer exactement ce qui est nécessaire et pas tout comme vous le faites en ce moment, imaginez que cette liste de publications peut être vraiment longue et que vous aurez un gros problème de performances plus tard.

Lisez la section suivante ici sur le tri et le filtrage.

https://firebase.google.com/docs/database/admin/retrieve-data#orderbychild

En dehors de cela, pensez à ajouter un index dans le champ userId pour accélérer votre requête.

0
Spiros I. Economakis 26 avril 2017 à 14:05