将文档添加到Cloud Firestore中的指定集合时,如何更新文档?

时间:2020-07-31 07:44:00

标签: javascript node.js firebase google-cloud-firestore google-cloud-functions

我的Firestore中有2个集合(全局和本地),当我向本地添加文档时,我需要将全局文档中的字段更新1

下面是我拥有的相同代码。我对此很陌生,因此我可能还会出现一些语法错误,如果发现任何错误,请突出显示。

const functions = require("firebase-functions");
const admin = require("firebase-admin");

exports.helloWorld = functions.https.onRequest((request, response) => {
  response.send("Hello world");
}); // For testing, even this is not being deployed

exports.updateGlobal = functions.firestore
  .document("/local/{id}")
  .onCreate((snapshot, context) => {
    console.log(snapshot.data());
    return admin
      .firebase()
      .doc("global/{id}")
      .update({
        total: admin.firestore.FieldValue.increment(1),
     });
  });

终端显示“加载用户代码时功能失败” 在此之前,它显示了一些类似“管理员未定义”或“无法访问未定义的 firestore ”的内容,我现在无法复制。

这是React应用的一部分,该应用具有通过 firebase npm模块运行的正常firestore 有关该问题的任何其他信息,我都会相应地编辑问题,非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

除了加载firebase-functionsfirebase-admin模块之外,您还需要初始化一个admin应用实例,可以从中进行Cloud Firestore更改,如下所示:

const functions = require('firebase-functions');
const admin = require('firebase-admin');

admin.initializeApp();

//...

我在您的CF中看到另一个问题。您需要使用context对象来获取id的值。

exports.updateGlobal = functions.firestore
  .document("/local/{id}")
  .onCreate((snapshot, context) => {
    
   const docId = context.params.id;

    return admin
      .firebase()
      .doc("global/" + docId)
      .update({
        total: admin.firestore.FieldValue.increment(1),
     });
  });

您还可以如下使用template literals

    return admin
      .firebase()
      .doc(`global/${docId}`)
      //...