如何使用 Firestore 函数更新地图中的数组?

Posted

技术标签:

【中文标题】如何使用 Firestore 函数更新地图中的数组?【英文标题】:How to update an array within a map using Firestore functions? 【发布时间】:2020-11-22 06:19:33 【问题描述】:

我想使用 Firestore 函数更新地图中的一个数组。我的数据结构如下所示:

在这种情况下,我想更新 uid 映射中的 shareRecordsWith 数组。

我一直在尝试使用以下 Firestore 功能,但它不起作用。

const recordsDict = "uid": aboutUID, "accessType": accessType
profilesRef.doc(uid).set(
    [uid]: 
        'shareRecordsWith': admin.firestore.FieldValue.arrayUnion(recordsDict),
        merge: true
    
);

有没有办法通过 Firestore 函数更新地图中的数组?

编辑:根据建议,我将功能更改为

profilesRef.doc(uid).set(
    [`$uid.shareRecordsWith`]: admin.firestore.FieldValue.arrayUnion(recordsDict)
,  merge: true )

不幸的是,它在文档中添加 $uid.shareRecordsWith 作为新字段,而不是添加到 uid 映射中的 shareRecordsWith 数组中。

这就是它的样子:

【问题讨论】:

【参考方案1】:

您需要将嵌套字段的整个路径作为单个属性调用。您可以通过将FieldPath 对象与update() 一起传递来做到这一点,但看起来set() 不支持这一点。

profilesRef.doc(uid).update(
    new admin.firestore.FieldPath(uid, "shareRecordsWith"),
    admin.firestore.FieldValue.arrayUnion(recordsDict)
)

【讨论】:

不幸的是,它将$uid.shareRecordsWith 添加为文档中的新字段,而不是添加到 uid 映射中的 shareRecordsWith 数组中。我在原始帖子中编辑并附上了屏幕截图。 看起来您必须将 update() 与 FieldPath 一起使用。 在我取出右括号后解决了您的问题!非常感谢!

以上是关于如何使用 Firestore 函数更新地图中的数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用flutter从firestore中删除/更新数组对象中的指定索引

如何使用 Android 更新 Firestore 中的数组元素?

如何将地图存储到 Firestore 数组

如何在不重新加载页面的情况下更新从 firestore 检索到的标记在我的地图上?

如何更新firestore中数组内的对象? [复制]

如何更新firestore中的数组[重复]