Удалить документ в хранилище, когда значение документа совпадает

У меня есть куча документов в коллекции на пожарном складе. То, что я хочу заархивировать, - это поиск документов по свойству отметки времени, после чего я хочу удалить именно этот документ.

Мой код сейчас выглядит так:

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

Он еще ничего не удаляет, а только возвращает мне значение найденного документа в моей коллекции, чтобы я мог видеть, работает ли вообще вызов .where (). У меня возникли проблемы с объединением этого .where () вместе с .delete (), и я даже не уверен, возможно ли это. Кто-нибудь знает, как выполнить эту задачу?


person Kubaghetto the fresh Testobun    schedule 19.05.2021    source источник


Ответы (1)


Я не вижу .delete() в вашем коде. Также нельзя комбинировать .delete() и .where(). Вам нужны идентификаторы документов или ссылки на них. Вы можете попробовать это:

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: вам не нужно использовать шаблонные литералы [${} thing], если у вас всего одна переменная. Вы можете напрямую передать переменную как .doc(chatId)

person Dharmaraj    schedule 19.05.2021
comment
Нечего добавить к этому комментарию, отличный ответ и прекрасное объяснение. Спасибо! - person Kubaghetto the fresh Testobun; 20.05.2021