首页 > 解决方案 > 如何删除 Firebase 对象映射中的深层嵌套字段

问题描述

我有一个名为“CourseList”的 Firebase 对象映射,其中包含嵌套字段。这些嵌套字段本身就是包含更多嵌套字段的对象映射。此外,其中一些对象映射将具有随机生成的名称。

目标是删除随机生成的名称为“352oIP3fdc6IIvuBbajR0”(蓝色下划线)的对象映射。“CourseList”和“LectureList”的名称是静态名称,但是红色的 CourseID(具有随机生成的名称“2dfPipFRKiB6TAKab4jv8”)。

在此处输入图像描述

通过关注 stackOverflow 上的其他问题,如果我想删除红色对象映射“2dfPipFRKiB6TAKab4jv8”,我能够使删除功能正常工作。

let CID = '2dfPipFRKiB6TAKab4jv8';

await db.collection('users').doc(UID).set( { 
  CourseList : { [CID]: FieldValue.delete() }
    
},{ merge: true }
);

但是,当我尝试删除“352oIP3fdc6IIvuBbajR0”的蓝色下划线的子对象映射时,该操作似乎没有做任何事情,并且 Firebase 文档没有改变。

let CID = "2dfPipFRKiB6TAKab4jv8";
let LID = "352oIP3fdc6IIvuBbajR0";

await db.collection('users').doc(UID).set( { 
  CourseList : { [`${CID}.LectureList.${LID}`]: FieldValue.delete() }

},{ merge: true }
    );

任何关于如何正确删除对象映射内深层嵌套字段的清晰说明将不胜感激。

标签: javascriptfirebasegoogle-cloud-firestore

解决方案


解决方案:

对于未来的读者,这是我用来删除对象映射中高度嵌套的字段的代码。

      const userRec = db.collection('users').doc(UID);
      let userRecData = await userRec.get();
      let userRecResp = {};
      userRecResp = userRecData.data();
      delete userRecResp.CourseList[CID]['LectureList'][LID];  
      await db.collection('users').doc(UID).update(userRecResp); 

请注意,“UID”、“CID”和“LID”是变量名。


推荐阅读