首页 > 解决方案 > Firebase Firestore 不保存数组数据

问题描述

在过去的几天里,我一直在努力解决这个问题。我正在尝试将数据保存到 firebase 集合。但是,firebase 拒绝保存字符串数组。除了显示为空的数组外,所有内容都已保存。但我确定数组不是空的。我什至直接在函数中打印出来,它可以工作。

uploadTask(taskForm: any, attachedFiles: Array<any>) {
    console.log(attachedFiles);
    const task = this.fireStore
      .collection('tasks')
      .doc(this.userId + uuidv4())
      .set({
        title: taskForm.title,
        description: taskForm.description,
        subject: taskForm.subject,
        urgency: taskForm.urgency,
        budget: taskForm.budget,
        time: taskForm.time,
        files: attachedFiles,
      })
      .then(() => {
        console.log('Document successfully written!');
      })
      .catch((error) => {
        console.error('Error writing document: ', error);
    });
}

标签: javascriptangularfirebasegoogle-cloud-firestore

解决方案


当您使用“设置”时,您正在使用该文档的 id 或字段修改已经存在的文档。如果我理解您的问题,您正在尝试创建一个全新的文档,因此您必须改用“添加”方法。请记住,firestore 将为创建的每个文档自动创建自己的唯一 ID。您无需指定 ID。

因此,您的代码应读作

uploadTask(taskForm: any, attachedFiles: Array<any>) {
    const task = this.fireStore
      .collection('tasks').add({  /*<===use add here*/
        title: taskForm.title,
        description: taskForm.description,
        subject: taskForm.subject,
        urgency: taskForm.urgency,
        budget: taskForm.budget,
        time: taskForm.time,
        files: attachedFiles,
      })
      .then(() => {
        console.log('Document successfully written!');
      })
      .catch((error) => {
        console.error('Error writing document: ', error);
    });
}

这个答案可能会帮助您[firestore set 和 add 之间的区别][1]


推荐阅读