【问题标题】:Firestore Update a document after a queryFirestore 在查询后更新文档
【发布时间】:2021-01-29 20:45:47
【问题描述】:

我想向现有文档(集合的最新文档)插入一个对象。

我进行查询,如果文档未满,我将新对象插入到数组中(通过更新文档)。

admin.firestore().collection('LinkPages').orderBy("sequence", "desc").limit(1).get()
   .then(function (linkPagesRef) { 
      linkPagesRef.forEach(function(doc) {
         const linkDocument = doc.data();
            const sequence = doc.data().sequence;
            if(linkDocument.links.length > 19)
            {
               functions.logger.info("Document full. Need to create one more");
            }
            else
            {
               functions.logger.info("Document not full. reuse it : ", linkDocument);
               doc.update({ links: admin.firestore.FieldValue.arrayUnion(youtubeData)})
               .then(function (docRef) { response.status(200).send("Ok"); })
               .catch(function (error) { functions.logger.info("Error adding document: ", error); response.status(500).send("Internal error"); });
            }
      });
    })
   .catch(function (error) { functions.logger.info("Error getting LinksPages document: ", error); response.status(500).send("Internal error"); });

但在执行时出现错误:

{"severity":"INFO","message":"Error getting LinksPages document:  TypeError: doc.update is not a function\n

Firestore API 似乎并不是真正一致的,并且取决于您获取文档参考的方式,您没有相同的可用功能。

【问题讨论】:

标签: firebase google-cloud-firestore google-cloud-functions


【解决方案1】:

你必须在DocumentReference上调用更新函数;

而不是这个

doc.update({ links: admin.firestore.FieldValue.arrayUnion(youtubeData)})

使用

doc.ref.update({ links: admin.firestore.FieldValue.arrayUnion(youtubeData)})

ref 字段为您提供DocumentReference,有了它,您可以对文档执行任何操作!

【讨论】:

    猜你喜欢
    • 2020-10-31
    • 2020-06-18
    • 2020-07-27
    • 2019-01-07
    • 2019-09-06
    • 2018-11-28
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多