首页 > 解决方案 > 需要一种方法来增加/减少 Firebase 存储中目录中文件的计数器

问题描述

我有一个应用程序可以将文件上传到我的主 Firebase 存储桶中的文件夹中。

它就像/records/{files_here}

  1. 基本上,我将文件发送到该路径
  2. Firebase Cloud Functions 将检测到有更改(如果更改是 .onFinalize 或 .onDelete 类型),然后将更新我的 Firestore 中的文档字段。

这在一次发送 1 个文件时非常有效。如果我一次发送超过 2 个文件,计数器开始重叠?例如,上传 3 个文件,但计数器从 0 上升到 4。

这就是我设置函数以增加/减少计数器的方式。

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

admin.initializeApp();

const db = admin.firestore();

// detects new files on dir records/
exports.uploadedRecordsStorageCreateCounter = functions.storage
  .object()
  .onFinalize(async (object) => {
    let matchDir = "records";
    let dir = object.name.substring(0, object.name.lastIndexOf("/"));
    if (dir == matchDir) {
      await db
        .collection("counters")
        .doc("records")
        .update({ count: admin.firestore.FieldValue.increment(1) });
    }
    return;
  });

// detects deletes on dir records/
exports.uploadedRecordsStorageDeleteCounter = functions.storage
  .object()
  .onDelete(async (object) => {
    let matchDir = "records";
    let dir = object.name.substring(0, object.name.lastIndexOf("/"));
    if (dir == matchDir) {
      await db
        .collection("counters")
        .doc("records")
        .update({ count: admin.firestore.FieldValue.increment(-1) });
    }
    return;
  });

有没有更好的方法来实现计数器?

标签: node.jsgoogle-cloud-firestoregoogle-cloud-functionsfirebase-storage

解决方案


推荐阅读