【问题标题】:Firestore Array of map not updatingFirestore 地图数组未更新
【发布时间】:2022-01-08 22:52:47
【问题描述】:

所以我正在做一个个人项目来学习 react-native 和 Firestore。

我有一个这样的数据库:

我希望我的代码在数组batteries 中添加一个新电池。 数组中的元素只是一个map{string, string}

问题是,当我用一个有效的新品牌更新数组时,如果我想再次用同一个品牌更新它, 所以到最后

batteries[0]: {'brand': 'cestmoi'}
batteries[1]: {'brand': 'cestmoi'}

数据库没有更新,没有任何错误。

我不明白为什么,我按照他们的教程进行操作。这是我的代码:

async function addData(collection, doc, value) {
    console.log(`Add data ${value.brand}`)
    try {
        const result = await firestore()
                    .collection(collection)
                    .doc(doc)
                    .set({
                        batteries: firestore.FieldValue.arrayUnion(value)
                    })
        console.log(result);
        return result;
    } catch (error) {
        return error;
    }
}

我习惯使用 try-catch,但我不知道 then...catch 是否更好。

【问题讨论】:

    标签: javascript firebase react-native google-cloud-platform google-cloud-firestore


    【解决方案1】:

    正如@windowsill 在他的回答中已经提到的那样,您无法使用客户端代码在数组中添加重复元素。如果您的应用程序需要,那么您必须读取整个数组,添加重复项,然后将文档写回 Firestore。

    但是,如果要更新对象数组(映射)中的现有元素,则必须对整个对象使用 arrayUnion。如果您想更好地了解该机制,可以阅读以下文章:

    【讨论】:

      【解决方案2】:

      arrayUnion 说它“将元素添加到数组中,但只添加尚未存在的元素”。也许它会进行字符串化或其他检查相等性的操作,因此不会添加新元素。我认为您必须 1. 获取当前列表,2. 添加您的元素,3. 将电池字段设置为更新列表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-01
        • 2021-07-20
        • 2022-01-08
        • 2020-11-22
        • 2020-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多