Maison  >  Questions et réponses  >  le corps du texte

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

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粉558478150P粉558478150181 Il y a quelques jours350

répondre à tous(2)je répondrai

  • P粉765684602

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

    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 < timestampThreshold) {
          // delete the key
          await admin.database().ref(`/keys/${userId}/${key}`).remove();
        }
        return null;
      });
    

    Source référence/inspiration

    répondre
    0
  • P粉446800329

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

    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 .

    répondre
    0
  • Annulerrépondre