cari

Rumah  >  Soal Jawab  >  teks badan

snapshor.foreach() tidak dipanggil dalam Firebase Cloud Firestore v9

Saya cuba memadamkan dokumen yang nilainya (cap masa) melepasi 2 jam. Saya perlu memanggil onSnapshot() tetapi bukan snapshot.foreach() . Disemak melalui console.log Called1 muncul pada konsol, tetapi Called2 tidak. Saya tertanya-tanya mengapa ia tidak dipanggil untuk memadam dokumen.

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粉041758700P粉041758700357 hari yang lalu576

membalas semua(1)saya akan balas

  • P粉300541798

    P粉3005417982024-01-30 00:29:26

    Dalam Cloud Firestore, setiap nilai medan diisih dalam indeks berdasarkan nilainya. Khususnya, nilai berangka diisih lebih awal dalam indeks nilai daripada nilai Timestamp 值。您对 where("Date", "<", cutoffTimestamp) 的查询将始终返回 0 个结果,因为它试图查找小于给定数字的 Timestamp.

    Untuk membetulkan ini, anda perlu menukar objek TimestampDate 值传递到 where() 过滤器。如果您选择使用 Date, yang akan disiri secara automatik oleh SDK kepada objek Cap Waktu . Ini membolehkan anda menggunakan apa yang anda rasa selesa.

    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)
    );

    Selain itu, daripada merekodkan "Pembidaan 1" dan "Pembidaan 2", cuba yang berikut:

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

    balas
    0
  • Batalbalas