Hapus dokumen di firestore ketika nilai dokumen cocok

Saya memiliki banyak dokumen dalam koleksi di firestore. Yang ingin saya arsipkan adalah mencari dokumen berdasarkan properti stempel waktu, setelah itu saya ingin menghapus dokumen ini dengan tepat.

Kode saya sekarang terlihat seperti ini:

firebase.firestore().collection("chatrooms").doc(`${chatId}`).collection(`${chatId}`).where("timestamp", "==", timekey).get().then((QuerySnapshot) => {
                if (!QuerySnapshot.empty) {
                    QuerySnapshot.forEach((doc)=>{
                        console.log(doc.data().value)
                    });
                } else {
                    // doc.data() will be undefined in this case
                    console.log("No such document!");
                }
            });

Itu belum menghapus apa pun, hanya mengembalikan nilai dokumen yang ditemukan dalam koleksi saya sehingga saya dapat melihat apakah panggilan .where() berfungsi. Saya mengalami kesulitan untuk menggabungkan .where() ini dengan .delete() dan saya bahkan tidak yakin apakah itu mungkin. Adakah yang tahu bagaimana menyelesaikan tugas ini?


person Kubaghetto the fresh Testobun    schedule 19.05.2021    source sumber


Jawaban (1)


Saya tidak dapat melihat .delete() di kode Anda. Anda juga tidak dapat menggabungkan .delete() dan .where(). Anda memerlukan ID dokumen atau referensinya. Anda dapat mencoba ini:

firebase.firestore().collection("chatrooms").doc(chatId).collection(chatId).where("timestamp", "==", timekey).get().then((QuerySnapshot) => {
  if (!QuerySnapshot.empty) {
    const deleteDocs = []
    QuerySnapshot.forEach((doc)=>{
      console.log(doc.data().value)
      deleteDocs.push(doc.ref.delete())
    });
    Promise.all(deleteDocs).then(() => {
      console.log("Docs delete")
    }).catch(e => console.log(e))

  } else {
    // doc.data() will be undefined in this case
    console.log("No such document!");
  }
});

PS: Anda tidak perlu menggunakan Template Literal [${} hal] jika Anda hanya memiliki satu variabel. Anda dapat langsung meneruskan var sebagai .doc(chatId)

person Dharmaraj    schedule 19.05.2021
comment
Tidak ada yang perlu ditambahkan pada komentar ini, jawaban sempurna dan penjelasan sempurna. Terima kasih! - person Kubaghetto the fresh Testobun; 20.05.2021