Firebase 云函数试图将用户数据合并到一个数组中

我目前正在开发一个 React-Native 项目。 我正在使用 Firebase 构建应用程序。 让我们将其归类为社交媒体应用。

使用 firebase 云功能,我尝试将所有用户放入一个文档中。 为此,使用 onCreate 事件,我会收听“用户”集合中创建的每个新文档,每次创建新用户时,我都会获取他的所有信息并将其放入集合“聚合”中的另一个文档中。给这棵树“聚合/用户”。

这是我的代码:

exports.aggregateNewUsers = functions.firestore
    .document('users/{userId}')
    .onCreate( (snapshot,context) => {

        const newUser = snapshot.data()
const aggUsersRef = db.doc('aggregation/users')

        return aggUsersRef.set({
users: [newUser]},{merge: true})

    })

有了这个,我希望每个新用户都添加到用户字段中(一个数组)。 我正在使用合并选项来这样做。但是,也许是因为我试图将它与数组一起使用,它不起作用,而不是保留旧数据并将其与新数据合并,它只是在每次创建新用户时替换它。 我也尝试使用 mergeFields 选项但没有成功,因为它会引发错误。

有没有办法让它起作用?

感谢您的时间!

qilinz 回答:Firebase 云函数试图将用户数据合并到一个数组中

处理数组可能很棘手。这里,“合并”并不意味着“追加”,它的意思是替换(或添加)作为传入对象一部分的属性的值,并保留其余部分单独的文件。由于您传入的是具有现有属性(用户)的对象,因此该属性的值将被替换。

要将项目附加到数组字段中(在 Cloud Firestore 中),有两种方法:

  1. 读取整个现有数组,然后将新数据附加到其中,最后使用修改后的数组更新文档。显然,如果您希望数组中有很多项,这不是一个可扩展的解决方案。

  2. 使用 Firebase ArrayUnion 方法

     aggUsersRef.update({
         users: firebase.firestore.FieldValue.arrayUnion(newUser)
     });
    

根据 Firebase Cloud Firestore 文档:

"如果您的文档包含数组字段,您可以使用 arrayUnion() 和 arrayRemove() 添加和删除元素。arrayUnion() 向数组添加元素但只有尚未存在的元素。arrayRemove() 删除每个给定元素的所有实例。” https://firebase.google.com/docs/firestore/manage-data/add-data

编辑以包含海报为其他读者找到的解决方案。

本文链接:https://www.f2er.com/1041.html

大家都在问