Maison > Questions et réponses > le corps du texte
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粉3005417982024-01-30 00:29:26
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 Timestamp
或 Date
值传递到 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", "<", cutoffTimestamp) );
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) // <-- Modern Firebase SDK equivalent of ref.delete() .then(() => console.log(`Deleted #${doc.id} successfully.`)) .catch((err) => console.error(`Failed to delete #${doc.id}`, err)); }); });