Rumah  >  Soal Jawab  >  teks badan

Alih keluar nod daripada pangkalan data masa nyata Firebase berdasarkan nilai bersarang menggunakan kekunci rawak

Saya mempunyai pangkalan data langsung dengan struktur berikut:

"keys" :
   "randomUserId1" :
       "randomKey1" : timestamp1
   "randomUserId2" :
       "randomKey2" : timestamp2
       "randomKey3" : timestamp3
   "randomUserId3" :
       "randomKey4" : timestamp4

Nilai cap masa ialah masa penciptaan dalam milisaat. Saya kini mahu menggunakan fungsi Firebase dan javascript untuk memadamkan semua kunci dengan cap masa yang terlalu lama. Masa tidak begitu penting, jadi fungsi padam mungkin mencetuskan penulisan yang sesuai di tempat lain dalam pangkalan data.

Saya cuba mengubah suai kaedah contoh untuk memadamkan nod anak lama tetapi tidak dapat memahami cara menjadikannya berfungsi dengan struktur pangkalan data di atas.

Bagaimana untuk menulis fungsi js untuk menyelesaikan tugasan di atas?

Saya sudah tentu boleh menambah pasangan kunci/nilai ("cap masa": cap waktu) di bawah "Kekunci rawak" jika itu akan memudahkan urusan.

P粉558478150P粉558478150181 hari yang lalu352

membalas semua(2)saya akan balas

  • P粉765684602

    P粉7656846022024-04-04 12:03:30

    Fungsi Firebase (dan gunakan firebase-sdk) untuk memadam kekunci dengan cap masa lebih awal daripada ambang:

    const functions = require('firebase-functions');
    const admin = require('firebase-admin');
    admin.initializeApp();
    
    exports.deleteOldKeys = functions.database.ref('/keys/{userId}/{key}')
      .onWrite(async (change, context) => {
        const timestampThreshold = Date.now() - (24 * 60 * 60 * 1000); // Change this to adjust the threshold
        const userId = context.params.userId;
        const key = context.params.key;
        if (!change.after.exists()) {
          // deleted key, no need to check timestamp
          return null;
        }
        const timestamp = change.after.val();
        if (timestamp < timestampThreshold) {
          // delete the key
          await admin.database().ref(`/keys/${userId}/${key}`).remove();
        }
        return null;
      });
    

    Sumber rujukan/inspirasi

    balas
    0
  • P粉446800329

    P粉4468003292024-04-04 00:15:52

    Pautan yang anda berikan adalah berdasarkan ulasan saya tentang pemadaman lebih lama daripada 2 jam

    Untuk menjadikannya berfungsi pada struktur data anda, anda boleh menggunakan orderByValue() 而不是 orderByChild("timestamp"). Jadi:

    var oldItemsQuery = ref.orderByValue().endAt(cutoff);

    Untuk mengetahui lebih lanjut, lihat dokumentasi Firebase tentang Isih dan Penapisan Data .

    balas
    0
  • Batalbalas