Comment récupérer un produit aléatoire unique dans Node Firebase ?
Firebase fournit des structures de données flexibles, vous permettant de stocker des données de manière hiérarchique. Dans certains scénarios, vous pouvez disposer d’un grand nombre d’enregistrements, mais vous n’avez besoin que d’un seul enregistrement unique et aléatoire. Cet article vous guidera à travers deux approches pour y parvenir dans Node Firebase.
Approche classique : téléchargement de tous les enregistrements
En supposant que la structure de votre base de données ressemble à ce qui suit :
Firebase-root | --- products | --- productIdOne | | | --- name: "gjwj" | | | --- category: "hreggrrg" | | | --- location: "vjhiwehifwe" | | | --- price: 44 | | | --- color: "fassaf" | --- productIdTwo | | | --- name: "uygfwh" | | | --- category: "hhhjwwwom" | | | --- location: "pervrr" | | | --- price: 33 | | | --- color: "yrtrr" | --- //And so on
Pour récupérer un produit aléatoire, vous pouvez implémenter le code suivant :
<code class="javascript">var listView = (ListView) findViewById(R.id.list_view); var arrayAdapter = new ArrayAdapter(context, android.R.layout.simple_list_item_1, randomProductList); listView.setAdapter(arrayAdapter); var rootRef = FirebaseDatabase.getInstance().getReference(); var productsRef = rootRef.child("products"); var valueEventListener = new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { var productList = new ArrayList(); for(var ds : dataSnapshot.getChildren()) { var name = ds.child("name").getValue(String.class); productList.add(name); } var productListSize = productList.size(); var randomProductList = new ArrayList(); randomProductList.add(new Random().nextInt(productListSize)); arrayAdapter.notifyDatasetChanged(); } @Override public void onCancelled(DatabaseError databaseError) { Log.d(TAG, "Error: ", task.getException()); //Don't ignore errors! } }; productsRef.addListenerForSingleValueEvent(valueEventListener);</code>
En parcourant tous les produits, vous pouvez créer une liste et générer un index aléatoire au sein de cette liste, qui représente le produit sélectionné.
Approche optimisée : éviter le téléchargement d'enregistrements complets
Pour minimiser la récupération de données, vous pouvez restructurer votre base de données comme suit :
Firebase-root | --- products | | | --- productIdOne | | | | | --- //details | | | --- productIdTwo | | | --- //details | --- productIds | --- productIdOne: true | --- productIdTwo: true | --- //And so on
Ici, vous créez un nœud distinct appelé productIds, qui contient uniquement les identifiants de vos produits. Pour récupérer un produit aléatoire :
<code class="javascript">var rootRef = FirebaseDatabase.getInstance().getReference(); var productIdsRef = rootRef.child("productIds"); var valueEventListener = new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { var productIdsList = new ArrayList(); for(var ds : dataSnapshot.getChildren()) { var productId = ds.getKey(); productIdsList.add(productId); } var productListSize = productList.size(); var randomProductList = new ArrayList();); var productIdRef = rootRef.child("products").child(productIdsList.get(new Random().nextInt(int productListSize)); var eventListener = new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { var name = dataSnapshot.child("name").getValue(String.class); Log.d("TAG", name); } @Override public void onCancelled(DatabaseError databaseError) { Log.d(TAG, "Error: ", task.getException()); } }; productIdRef.addListenerForSingleValueEvent(eventListener); } @Override public void onCancelled(DatabaseError databaseError) { Log.d(TAG, "Error: ", task.getException()); } }; productIdsRef.addListenerForSingleValueEvent(valueEventListener);</code>
En récupérant d'abord l'ID du produit, vous pouvez ensuite rechercher le produit spécifique, ce qui entraîne un processus de récupération plus efficace et ciblé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!