Heim > Fragen und Antworten > Hauptteil
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粉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; });
P粉4468003292024-04-04 00:15:52
您提供的链接基于我对删除早于2小时
要使其在您的数据结构上工作,您可以使用 orderByValue()
而不是 orderByChild("timestamp")
。所以:
var oldItemsQuery = ref.orderByValue().endAt(cutoff);
要了解相关详情,请参阅 上的 Firebase 文档排序和过滤数据。