Rumah >Java >javaTutorial >Bagaimana untuk Mendapatkan Produk Rawak dengan Cekap daripada Set Data Firebase Besar dalam Node.js?
Bagaimana untuk Mendapatkan Produk Rawak Unik dalam Node Firebase?
Firebase menyediakan struktur data yang fleksibel, membolehkan anda menyimpan data dalam cara hierarki. Dalam sesetengah senario, anda mungkin mempunyai sejumlah besar rekod, tetapi anda hanya memerlukan satu rekod unik dan rawak. Artikel ini akan membimbing anda melalui dua pendekatan untuk mencapai perkara ini dalam Node Firebase.
Pendekatan Klasik: Memuat Turun Semua Rekod
Dengan mengandaikan struktur pangkalan data anda menyerupai yang berikut:
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
Untuk mendapatkan semula produk rawak, anda boleh melaksanakan kod berikut:
<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>
Dengan mengulangi semua produk, anda boleh membuat senarai dan menjana indeks rawak dalam senarai itu, yang mewakili produk yang dipilih.
Pendekatan Dioptimumkan: Mengelakkan Muat Turun Rekod Penuh
Untuk meminimumkan pengambilan data, anda boleh menyusun semula pangkalan data anda seperti berikut:
Firebase-root | --- products | | | --- productIdOne | | | | | --- //details | | | --- productIdTwo | | | --- //details | --- productIds | --- productIdOne: true | --- productIdTwo: true | --- //And so on
Di sini, anda membuat nod berasingan yang dipanggil productIds, yang mengandungi hanya ID produk anda. Untuk mendapatkan semula produk rawak:
<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>
Dengan mendapatkan semula ID produk dahulu, anda boleh membuat pertanyaan untuk produk tertentu, menghasilkan proses mendapatkan semula yang lebih cekap dan disasarkan.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Produk Rawak dengan Cekap daripada Set Data Firebase Besar dalam Node.js?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!