Ich versuche, Dokumente zu löschen, deren Wert (Zeitstempel) mehr als 2 Stunden beträgt. Ich muss onSnapshot() aufrufen, aber nicht snapshot.foreach() . Über console.log überprüft; Called1 wird auf der Konsole angezeigt, Called2 jedoch nicht. Ich frage mich, warum es nicht heißt, das Dokument zu löschen.
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(); }); }); })
在 Cloud Firestore 中,每个字段值根据其值在索引中排序。特别是,数字值在值索引中的排序早于
Timestamp
值。您对where("Date", "<", cutoffTimestamp)
的查询将始终返回 0 个结果,因为它试图查找小于给定数字的Timestamp
值。要纠正此问题,您需要将
Timestamp
或Date
值传递到where()
过滤器。如果您选择使用Date
对象,它将是 由 SDK 自动序列化为 Timestamp 对象。这使您可以使用您觉得舒服的东西。