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(); }); }); })
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.