>  Q&A  >  본문

snapshor.foreach()가 Firebase Cloud Firestore v9에서 호출되지 않습니다.

값(타임스탬프)이 2시간이 지난 문서를 삭제하려고 합니다. onSnapshot() 을 호출해야 하지만 snapshot.foreach() 는 호출하지 않습니다. console.log를 통해 확인하면 Called1은 콘솔에 표시되지만 Called2는 표시되지 않습니다. 문서를 삭제하라는 호출이 왜 호출되지 않는지 궁금합니다.

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粉041758700264일 전500

모든 응답(1)나는 대답할 것이다

  • P粉300541798

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

    Cloud Firestore에서 각 필드 값 은 해당 값을 기준으로 인덱스에서 정렬 됩니다. 특히 숫자 값은 Timestamp 值。您对 where("Date", "<", cutoffTimestamp) 的查询将始终返回 0 个结果,因为它试图查找小于给定数字的 Timestamp 값보다 값 인덱스에서 먼저 정렬됩니다.

    이 문제를 해결하려면 SDK에 의해 TimestampDate 值传递到 where() 过滤器。如果您选择使用 Date 자동으로 직렬화되는 개체를 Timestamp 개체 로 변환해야 합니다. 이를 통해 자신이 편안하다고 느끼는 것을 사용할 수 있습니다.

    으아아아

    또한 "입찰 1" 및 "입찰 2"를 녹음하는 대신 다음을 시도해 보세요.

    으아아아

    회신하다
    0
  • 취소회신하다