snapshor.foreach() n'est pas appelé dans Firebase Cloud Firestore v9
P粉041758700
P粉041758700 2024-01-29 14:39:08
0
1
556

J'essaie de supprimer des documents dont la valeur (horodatage) est supérieure à 2 heures. Je dois appeler onSnapshot() mais pas snapshot.foreach() . Vérifié via console.log ; Called1 apparaît sur la console, mais pas Called2. Je me demande pourquoi il n'est pas appelé pour supprimer le document.

onMounted(() => {
    const itemsCollectionRef = collection(db, "Bookings");
    const cutoffTimestamp = Date.now() - 2 * 60 * 60 * 1000; // Two hours ago
    const oldItemsQuery = query(
      itemsCollectionRef,
      where("Date", "<", cutoffTimestamp)
    );

    onSnapshot(oldItemsQuery, (snapshot) => {
      console.log('called1');
      snapshot.forEach((doc) => {
        // Delete the document
        console.log('called2');
        db.collection("Bookings").doc(doc.id).delete();
      });
    });
  })

P粉041758700
P粉041758700

répondre à tous(1)
P粉300541798

Dans Cloud Firestore, chaque valeur de champ est triée dans l'index en fonction de sa valeur. En particulier, les valeurs numériques sont triées plus tôt dans l'index de valeur que les valeurs Timestamp 值。您对 where("Date", "<", cutoffTimestamp) 的查询将始终返回 0 个结果,因为它试图查找小于给定数字的 Timestamp.

Pour corriger cela, vous devez convertir l'objet TimestampDate 值传递到 where() 过滤器。如果您选择使用 Date, qui sera automatiquement sérialisé par le SDK en un objet Timestamp . Cela vous permet d’utiliser ce avec quoi vous vous sentez à l’aise.

const cutoffTimestamp = Timestamp.fromMillis(Date.now() - 2 * 60 * 60 * 1000); // Two hours ago
// or const cutoffDate = new Date(Date.now() - 2 * 60 * 60 * 1000);
const oldItemsQuery = query(
  itemsCollectionRef,
  where("Date", "

De plus, au lieu d'enregistrer « Bidding 1 » et « Bidding 2 », essayez ce qui suit :

onSnapshot(oldItemsQuery, (snapshot) => {
  console.log(`Found ${snapshot.size} documents older than 2h`);
  snapshot.forEach((doc) => {
    // Delete the document
    console.log(`Requesting #${doc.id} be deleted…`);
    deleteDoc(doc.ref) //  console.log(`Deleted #${doc.id} successfully.`))
      .catch((err) => console.error(`Failed to delete #${doc.id}`, err));
  });
});
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal