首页 > 解决方案 > firestore 删除文档的子集合不起作用

问题描述

严重难倒这一点。我正在尝试删除集合“孩子”中的嵌套记录。

“todaysEvents”是一张地图(在孩子的收藏中),我的目标是删除其中一个键/值对(event.id)。我已授予所有权限,当我运行它时,它返回该文档已成功删除但它实际上尚未被删除,因为我仍然可以在数据库中看到它。在删除之前我需要对地图做些什么特别的事情吗?我觉得这应该工作顺利......

FIRESTORE.db
    .collection("kids")
    .doc(event.kidId)
    .collection("todaysEvents")
    .doc(event.id)
    .delete()
    .then(data => {
      console.log("Document successfully deleted!", data);
    })
    .catch(error => {
      console.error("Error removing document: ", error);
    });

在此处输入图像描述

标签: firebasegoogle-cloud-firestorefirebase-security

解决方案


Firestore 是一个文档存储数据库。您可以使用的操作是一次查找/读取、创建、更新和删除单个和整个文档(想想:JSON 对象)。

没有 API 可以仅删除现有文档中的字段。相反,您需要读取文档(JSON 对象),修改对象(例如,从文档中删除一个元素),然后将文档写回 Firestore。

所以在你的例子中你会做类似的事情(下面的伪代码):

const removeEventId = async (kidId, todayEventsId) => {
  try {
    // fetch the "kids" document
    let docRef = FIRESTORE.db.collection("kids").doc(kidId);
    let docSnap = await docRef.get();
    let docData = docSnap.data();

    // remove the element that we no longer want in the document
    delete docData.todaysEvents[todaysEventId];

    // update the document in Firestore
    await docRef.update(docData);
    console.log(`Document updated with ${todaysEventId} removed!`, docData);
  } catch (ex) {
      console.error(`EXCEPTION while removing ${todaysEventId}:`, ex);
  }
}

推荐阅读