【发布时间】:2018-06-11 19:01:14
【问题描述】:
这是一个二合一的问题。
第 1 部分: 我在 Firestore 中存储数据,其中一个字段是“end_date”时间戳字段。 怎么写一个云函数,当这个字段过去一个多月的时候,删除记录?
第 2 部分: 我怎样才能让它每天运行?
【问题讨论】:
标签: firebase google-cloud-firestore google-cloud-functions
这是一个二合一的问题。
第 1 部分: 我在 Firestore 中存储数据,其中一个字段是“end_date”时间戳字段。 怎么写一个云函数,当这个字段过去一个多月的时候,删除记录?
第 2 部分: 我怎样才能让它每天运行?
【问题讨论】:
标签: firebase google-cloud-firestore google-cloud-functions
您可以通过结合以下技术来解决这个问题以及相关问题,相对容易:
Nodejs、firebase-admin SDK 和 async/await 模式。这不是一个完整的解决方案,只是给你一个想法:
firestore 查询,用于获取过去 'end_date' 所在的所有文档。像这样的东西(在 Nodejs 中)。
let now = new Date(); // Maybe use luxon or moment
now.setMonth(d.getMonth() - 1);
const query = firestore.collection('items')
.where('end_date', '<=', now)
const snapshots = await query.get();
// Snapshots now contains the documents to delete
firestore 批处理,使用它来创建批处理操作,例如删除。您最多可以一次执行 500 次操作:
const batch = firestore.batch();
snapshots.forEach(v => batch.delete(v.ref));
await batch.commit();
现在您只需要一种每天运行一次的方法。好吧,在创建 HTTPS firebase function 之后,您可以使用类似这个很棒的免费 cron-job 服务 cron-job.org 来每天调用您的函数。
请记住,如果您使用 cron-job.org 来安排您的工作,请考虑身份验证。
如果您需要任何其他帮助,请告诉我。
【讨论】: