【问题标题】:How to update an array item in Firestore如何更新 Firestore 中的数组项
【发布时间】:2019-05-14 00:33:23
【问题描述】:

根据新的 Firestore 文档,我看到 2 个新方法(arrayUnion、arrayRemove)用于处理嵌套在文档中的数组。这些方法允许您添加和删除数组项,但我将如何更新现有元素?

【问题讨论】:

  • 很确定没有更新内置功能,这种情况你需要删除、编辑和重新添加。

标签: firebase google-cloud-firestore


【解决方案1】:

没有更新方法,因为如果你想执行更新,你需要知道那个特定元素的索引。当谈到 Cloud Firestore 阵列时,事情可能与您想象的不同。

因为我们正在创建可在多用户环境中使用的应用程序,所以请尝试考虑如果用户想要编辑索引 0 处的值,而其他用户想要删除索引 0 处的值以及同时其他一些用户可能想要在索引 0 处添加另一个项目。当然,您最终会得到非常不同的结果,为什么不呢,甚至得到一个ArrayIndexOutOfBoundsException。所以带有数组的 Firestore 操作有点不同。因此,您无法在特定索引处执行插入、更新或删除等操作。

正如 Doug 在他的回答中提到的,如果这两种方法对您的帮助不够,您应该获取整个文档,获取数组,修改它并将其添加回数据库。

【讨论】:

    【解决方案2】:

    如果 arrayUnion 或 arrayRemove 不满足您的数组修改,则必须读取文档,修改内存中的数组值,然后使用新数组整体更新数组字段。

    【讨论】:

    • 我有一组地图。所以我希望我可以用该特定数组项的所有键值对更新数组的一项(这是一个映射)。但听起来我基本上需要获取所有数组项并重建整个数组以使用已更改的映射值更新一个元素。
    • 你必须这样做,是的。
    • @JimJones 假设您可以重新创建确切的对象,您似乎也可以删除该项目,然后在数组中添加“更新”对象。这很昂贵,但可能。
    猜你喜欢
    • 2020-07-27
    • 2019-02-01
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 2020-03-02
    相关资源
    最近更新 更多