【问题标题】:how to add object to firestore first index of object array如何将对象添加到对象数组的firestore第一个索引
【发布时间】:2020-07-27 23:44:52
【问题描述】:

我一直在谷歌上搜索如何将对象添加到 firestore 中的数组中,并发现 arrayUnion() 能够将对象添加到 firestore 数组中,但它只将对象添加到数组的最后一个索引中,但是如何将其添加到数组的第一个索引中?

//add "greater_virginia" into last index of array
washingtonRef.update({
    regions: firebase.firestore.FieldValue.arrayUnion("greater_virginia")
});

//how to add "greater_virginia" into first index of array?

它与arrayUnion 基本相同,但我不想将其添加到最后一个索引中,而是将其添加到数组的第一个索引中。

【问题讨论】:

    标签: javascript arrays reactjs react-native google-cloud-firestore


    【解决方案1】:

    如果 Firestore 数组的行为类似于实时数据库数组,那么它们实际上并不存在。据我所知,它们存储为地图,例如:

    {
      0: "first element",
      2: "second and so on",
    }
    

    您可能会看到取消班次将是一个巨大的转变。事实上,firestore 不允许你这样做,它说“......为了避免在多用户环境中可能出现的一些问题,你将添加更多类似集合的功能” .

    考虑到这一点,这个问题通常在应用程序级别通过获取数组,根据需要对其进行变异,然后设置整个内容来解决。

    进一步阅读https://firebase.googleblog.com/2018/08/better-arrays-in-cloud-firestore.html

    PS:小心arrayUnion 运算符,因为它实际上执行add to set

    【讨论】:

    • Firestore 数组字段确实存在。它们有自己的专用字段类型,与地图不同。它根本不像 Realitme 数据库。
    • 感谢您提供非常明确的答案,您知道我可以用来手动获取它的任何语法,将其取消移位然后将其推送到 Firestore 中吗?也许我可以对它做更多的研究
    • 感谢@DougStevenson 的澄清。至于如何从数据库中获取和设置数据,你必须阅读文档的开头firebase.google.com/docs/firestore/query-data/get-data
    • 从概念上讲,它类似于 doc = get doc from collection; newArray = [newElement, ...doc.arrayField];在 doc 的 arrayField 上设置 newArray;
    【解决方案2】:

    Firestore 不提供按索引修改数组字段项的任何方法。 arrayUnion 只会在元素不存在时追加到数组的末尾。

    如果要通过索引修改数组,则必须读取文档,将内存中的数组修改为您想要的样子,然后将修改后的数组写回文档。

    【讨论】:

    • 注意:与arrayUnion不同,这会导致原子性失败
    • @AlbertRenshaw 您可以为此使用事务。
    猜你喜欢
    • 1970-01-01
    • 2021-12-15
    • 2021-08-24
    • 1970-01-01
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多