如何在 Node Firebase 中擷取唯一的隨機乘積?
Firebase 提供靈活的資料結構,讓您以分層方式儲存資料。在某些情況下,您可能擁有大量記錄,但只需要一筆唯一且隨機的記錄。本文將引導您透過兩種方法在 Node Firebase 中實現此目的。
經典方法:下載所有記錄
假設您的資料庫結構類似於以下內容:
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
要擷取隨機產品,您可以實現以下程式碼:
<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>
透過迭代所有產品,您可以建立一個清單並在該清單中產生隨機索引,該索引代表所選產品。
最佳化方法:避免全記錄下載
為了最大限度地減少資料檢索,您可以如下重組資料庫:
Firebase-root | --- products | | | --- productIdOne | | | | | --- //details | | | --- productIdTwo | | | --- //details | --- productIds | --- productIdOne: true | --- productIdTwo: true | --- //And so on
在這裡,您建立一個名為productIds的單獨節點,其中僅包含您產品的ID。檢索隨機商品:
<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>
透過先檢索商品ID,然後查詢特定商品,從而實現更有效率、更有針對性的檢索過程。
以上是如何從 Node.js 中的大型 Firebase 資料集中有效率地檢索隨機乘積?的詳細內容。更多資訊請關注PHP中文網其他相關文章!