【问题标题】:Firestore cloud function add field to documentFirestore 云功能将字段添加到文档
【发布时间】:2021-11-24 19:03:37
【问题描述】:

我正在尝试编写一个云函数,让我可以创建一个包含文档的集合,然后将字段添加到该文档。目前我的函数创建集合和评论,但每次都替换每个字段并覆盖现有的字段,所以在推送所有数据之后,我只得到一个字段。我如何每次都添加一个字段? 我的代码

if (data && typeof data === "object") {
   Object.keys(data).forEach((docKey) => {
  firestore
    .collection(collectionKey)
    .doc("quotes")
    .set(data[docKey])
    .then((res) => {
      console.log("Document successfully written!");
    })
    .catch((error) => {
      console.error("Error writing document: ", error);
    });
  //});
}

数据

"2": {
    "Quote": "Lorem Ipsum"
  },
  "3": {
    "Quote": "123"
  },
  "4": {
    "Quote": "456"
  }

在我运行该函数后,文档引号中的唯一内容是最后一个条目“456”。我如何处理所有的字段?

【问题讨论】:

    标签: javascript firebase react-native google-cloud-firestore


    【解决方案1】:

    您似乎正在尝试更新文档,但您使用的是.set() 函数,该函数使用新提供的数据更新您的文档。您将需要 .update() 来保留您以前的数据。

    if (data && typeof data === "object") {
       Object.keys(data).forEach((docKey) => {
      firestore
        .collection(collectionKey)
        .doc("quotes")
        .update(data[docKey])
        .then((res) => {
          console.log("Document successfully written!");
        })
        .catch((error) => {
          console.error("Error writing document: ", error);
        });
      //});
    }
    

    【讨论】:

      【解决方案2】:

      要向现有文档添加字段,请使用 update,如 Anuj 的回答所示。

      如果您想创建初始文档并使用单个语句对其进行更新,您可以将merge: true 选项传递给set()

      firestore
        .collection(collectionKey)
        .doc("quotes")
        .set({ [docKey]: data[docKey] }, { merge: true })
      

      您会注意到我还在数据中添加了[docKey]: ,因为我希望您希望docKey 的值成为字段名称。

      【讨论】:

      猜你喜欢
      • 2020-04-01
      • 2018-10-04
      • 2018-12-22
      • 2020-04-25
      • 1970-01-01
      • 2020-04-28
      • 2019-08-07
      • 2021-03-27
      • 2020-02-08
      相关资源
      最近更新 更多