Wie rufe ich ein eindeutiges Zufallsprodukt in Node Firebase ab?
Firebase bietet flexible Datenstrukturen, die es Ihnen ermöglichen, Daten hierarchisch zu speichern. In einigen Szenarien verfügen Sie möglicherweise über eine große Anzahl von Datensätzen, benötigen jedoch nur einen einzigen eindeutigen und zufälligen Datensatz. Dieser Artikel führt Sie durch zwei Ansätze, um dies in Node Firebase zu erreichen.
Klassischer Ansatz: Herunterladen aller Datensätze
Angenommen, Ihre Datenbankstruktur ähnelt der folgenden:
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
Um ein zufälliges Produkt abzurufen, können Sie den folgenden Code implementieren:
<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>
Indem Sie alle Produkte durchlaufen, können Sie eine Liste erstellen und einen zufälligen Index innerhalb dieser Liste generieren stellt das ausgewählte Produkt dar.
Optimierter Ansatz: Vermeidung des vollständigen Datensatz-Downloads
Um den Datenabruf zu minimieren, können Sie Ihre Datenbank wie folgt umstrukturieren:
Firebase-root | --- products | | | --- productIdOne | | | | | --- //details | | | --- productIdTwo | | | --- //details | --- productIds | --- productIdOne: true | --- productIdTwo: true | --- //And so on
Hier erstellen Sie einen separaten Knoten namens „productIds“, der nur die IDs Ihrer Produkte enthält. So rufen Sie ein zufälliges Produkt ab:
<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>
Indem Sie zuerst die Produkt-ID abrufen, können Sie dann nach dem spezifischen Produkt fragen, was zu einem effizienteren und gezielteren Abrufprozess führt.
Das obige ist der detaillierte Inhalt vonWie kann ich in Node.js effizient ein zufälliges Produkt aus einem großen Firebase-Datensatz abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!