Supprimez les nœuds de la base de données en temps réel Firebase en fonction de valeurs imbriquées à l'aide de clés aléatoires
P粉558478150
P粉558478150 2024-04-03 18:10:45
0
2
494

J'ai une base de données live avec la structure suivante :

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

La valeur de l'horodatage est l'heure de création en millisecondes. Je souhaite maintenant utiliser les fonctions Firebase et javascript pour supprimer toutes les clés dont l'horodatage est trop ancien. Le timing n'est pas si important, donc la fonction de suppression peut se déclencher sur une écriture appropriée ailleurs dans la base de données.

J'ai essayé de modifier l'exemple de méthode pour supprimer les anciens nœuds enfants, mais je n'ai pas compris comment la faire fonctionner avec la structure de base de données ci-dessus.

Comment écrire la fonction js pour effectuer les tâches ci-dessus ?

Je pourrais bien sûr ajouter une paire clé/valeur ("timestamp": timestamp) sous "randomKey" si cela pouvait faciliter les choses.

P粉558478150
P粉558478150

répondre à tous(2)
P粉765684602

Fonction Firebase (et utilisez firebase-sdk) pour supprimer les clés avec un horodatage antérieur au seuil :

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 

Source référence/inspiration

P粉446800329

Le lien que vous avez fourni est basé sur mon avis sur la suppression datant de plus de 2 heures

Pour le faire fonctionner sur votre structure de données, vous pouvez utiliser orderByValue() 而不是 orderByChild("timestamp"). Alors :

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

Pour en savoir plus, consultez la documentation Firebase sur le tri et le filtrage des données .

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal