如何在Firebase中创建计算字段



我正在创建一个Firebase应用程序,我想在其中存储用户的订阅详细信息。我计划存储订阅的start_date、end_date和number_of_days_left。我想根据结束日期和当前日期之间的差值来计算number_of_days_left。number_of_days_left应在Firebase中每天更新。最好的方法是什么?

要实现所需任务,可以使用Scheduled Firebase Cloud函数。此函数创建Pub/Sub主题,并使用Cloud Scheduler触发该主题上的事件,以确保函数按所需时间表运行。

要存储订阅的start_dateend_datenumber_of_days_left,可以使用Cloud Firestore

首先,您可以在Firestore中创建一个users集合。并在用户订阅应用程序时添加一个唯一的文档。在文档中,您可以存储类型为timestamp的字段的start_dateend_date和类型为numbernumber_of_days_left

Firestore数据库结构如下所示-

users------>
user1------>
start_date
end_date
number_of_days_left
user2----->
start_date
end_date
number_of_days_left
user3----->
start_date
end_date
number_of_days_left

现在,您可以实现计划的Firebase功能,并每天更新number_of_days_left字段。计划的Firebase函数使用Unix Crontab。你可以在这里找到更多关于Unix Crontab语法的信息。以下调度的Firebase函数位于NodeJS中,每天在00:00运行,并为users集合中的每个用户更新number_of_days_left字段。

const admin = require("firebase-admin");
const functions = require("firebase-functions");
admin.initializeApp();
const db=admin.firestore();
exports.scheduledFunctionCrontab = functions.pubsub.schedule("0 0 * * *")
.timeZone("Asia/Kolkata")
// Users can choose timezone - default is America/Los_Angeles
.onRun(async (context) => {
const docRef = await db.collection("users").get();
docRef.forEach((doc)=>{
const data=doc.data();
const difference=Math.
floor((data.end_date-admin.firestore.Timestamp.now())/(24*60*60));
doc.ref.update({"number_of_days_left": difference});
});
});

在功能代码中,您可以指定此处列出的任何有效的timezone

要实现这一点,我建议您使用Cloud Scheduler:

Cloud Scheduler是一个完全管理的企业级cron作业调度器。

因此,您可以创建一个cron来每天更新差异。这样,您将始终有一个包含确切剩余天数的字段。

相关内容

  • 没有找到相关文章

最新更新