首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用防火墙云函数删除多条路径?

如何使用防火墙云函数删除多条路径?
EN

Stack Overflow用户
提问于 2022-01-25 20:28:38
回答 1查看 57关注 0票数 0

我想删除15天以上的数据。我可以同时查询和删除多个目录吗?

数据库结构是这样的。有多种语言和类型。

代码语言:javascript
运行
复制
{
  "hr" : {
    "classic" : {
      "finish" : {
        "-MuJD4oAlQ42TkdfKW5M" : {
          "gid" : "LlAHMyj",
          "ts" : 6.652890289073215E8
        }
      }
    },
    "duel" : {
      "finish" : {
        "-MuJD4o9LONeayt4ACMC" : {
          "gid" : "rfePU2x",
          "ts" : 6.652890289073215E8
        }
      }
    },
    "target" : {
      "finish" : {
        "-MuJD4o9LONeayt4ACMD" : {
          "gid" : "FBz4H_4",
          "ts" : 6.652890289073215E8
        }
      }
    }
  },
  "nl" : {
    "target" : {
      "finish" : {
        "-MuJD4oAlQ42TkdfKW5L" : {
          "gid" : "sv3pRfC",
          "ts" : 6.652890289073215E8
        }
      }
    }
  }
}

我试着用下面的代码来完成它,但是它总是返回null。

代码语言:javascript
运行
复制
exports.deleteOldData = function (snap, context) {
  const end = new Date(new Date().setDate(new Date().getDate() - 15));
  const endDate = toSwiftDate(end);

  database.ref("/matchTour/{language}/{type}/finish/").orderByChild("ts").endAt(endDate).transaction(function (info) {
    if (info === null) return info;
    console.log("matchTour 3", JSON.stringify(info.val()));
    return null;
  }).catch((error) => {
    console.log("error);
  });
};
EN

Stack Overflow用户

发布于 2022-01-25 20:39:08

您不能在查询上运行事务。事实上,从查询的参考文档来看,这甚至不应该编译。

这一点应该更接近:

代码语言:javascript
运行
复制
exports.deleteOldData = function (snap, context) {
  const end = new Date(new Date().setDate(new Date().getDate() - 15));
  const endDate = toSwiftDate(end);

  const ref = database.ref("/matchTour/{language}/{type}/finish/");
  return ref
    .orderByChild("ts").endAt(endDate)
    .once("value")
    .then((results) => {
    let updates = {};
    results.forEach((snapshot) => {
      updates[snapshot.key] = null;
    });
    return ref.update(updates);
  }).catch((error) => {
    console.error(error);
  });
};

上面的结果从数据中读取查询的结果,执行一个多路径的更新来删除所有这些,并确保异步读写气泡返回的承诺,这样您的函数容器就不会过早终止。

这就引出了languagetypedatabase.ref("/matchTour/{language}/{type}/finish/")中的位置问题。如果希望有来自上下文的变量,则需要对此字符串使用backticks:

代码语言:javascript
运行
复制
database.ref(`/matchTour/{language}/{type}/finish/`)

总之,这段代码中有相当多的错误,使我认为您可能还不太习惯编写服务器端JavaScript。如果是这样的话,编写云函数并不是最容易开始的方法,我建议您首先在客户端JavaScript环境中编写相同的代码,比如本地node.js脚本,甚至网页。

阅读面向Web开发人员的Firebase文档和/或参加Web开发人员的Firebase codelab是很好的起点。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70855277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档