suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Entfernen Sie Knoten aus der Firebase-Echtzeitdatenbank basierend auf verschachtelten Werten mithilfe von Zufallsschlüsseln

Ich habe eine Live-Datenbank mit folgender Struktur:

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

Der Zeitstempelwert ist die Erstellungszeit in Millisekunden. Ich möchte jetzt Firebase-Funktionen und Javascript verwenden, um alle Schlüssel zu löschen, deren Zeitstempel zu alt ist. Das Timing ist nicht so wichtig, daher kann die Löschfunktion bei einem geeigneten Schreibvorgang an einer anderen Stelle in der Datenbank ausgelöst werden.

Ich habe versucht, die Beispielmethode zu ändern, um alte untergeordnete Knoten zu löschen, konnte aber nicht verstehen, wie das mit der oben genannten Datenbankstruktur funktioniert.

Wie schreibe ich eine js-Funktion, um die oben genannten Aufgaben auszuführen?

Ich könnte natürlich unterhalb von „randomKey“ ein Schlüssel/Wert-Paar („timestamp“: timestamp) hinzufügen, wenn das die Sache einfacher machen würde.

P粉558478150P粉558478150230 Tage vor443

Antworte allen(2)Ich werde antworten

  • P粉765684602

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

    Firebase 函数(并使用 firebase-sdk)删除时间戳早于阈值的键:

    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;
      });
    

    来源参考/灵感

    Antwort
    0
  • P粉446800329

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

    您提供的链接基于我对删除早于2小时

    要使其在您的数据结构上工作,您可以使用 orderByValue() 而不是 orderByChild("timestamp")。所以:

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

    要了解相关详情,请参阅 上的 Firebase 文档排序和过滤数据

    Antwort
    0
  • StornierenAntwort