首页 > 解决方案 > 尝试删除 firestore 中的字段数组,但我的方法不起作用

问题描述

所以我试图删除字段 Notes[1],selectedNote 有一个我需要删除的选定数组的值。

window.addEventListener("load", function load(event) {
  document.getElementById("deleteNotes").onclick = function() {
    console.log("you did click atleast");
    firebase.auth().onAuthStateChanged(function(user) {
      if (user) {
        let user = firebase.auth().currentUser;
        let userInfo = db.collection("Users").doc(user.uid);
        userInfo.get().then(function(doc) {
          if (doc.exists) {
            let selectedNote = document.getElementById("noteSelect")
              .selectedIndex;
            console.log(selectedNote);
            var cityRef = db.collection("Users").doc(user.uid);
            cityRef.update({
             Notes: FieldValue.delete().arrayRemove(selectedNote)
            });
          }
        });
      }
    });
  };
});

所以我想用这个

 cityRef.update({
             Notes: FieldValue.delete().arrayRemove(selectedNote)
            });

删除 selectedNote ,它是数组 1 例如在 Notes 中。我不希望删除整个 Notes 字段,而只是删除 Notes 字段中的选定数组。出于某种原因,我正在努力让它工作。任何帮助将不胜感激<3

标签: javascriptgoogle-cloud-firestore

解决方案


Firebase 数组不为其数组使用索引,而是需要数组条目的值。这确实意味着您无法摆脱重复的数据。

您必须首先获取数组“Notes”并从其索引中返回其值虽然,我听说数组可能会乱序返回,因为它们不依赖于索引。

改变这一行;

Notes: FieldValue.delete().arrayRemove(selectedNote)

对此;

Notes: FieldValue.delete().arrayRemove(doc.data().Notes[selectedNote])

我建议您从本地存储的变量中提取数组的值,以确保值与编辑前和编辑后匹配。


推荐阅读