如何使用云功能每天在Firestore中更新我的所有文档

时间:2019-09-24 16:34:10

标签: node.js firebase google-cloud-platform google-cloud-firestore

我正在android studio中构建一个待办事项列表应用程序,将任务保存在Firestore中,我给每个任务列出了最后期限,并且我想每天早上检查是否达到了截止日期,所以我尝试使用云解决问题我找不到如何在特定路径下获取所有文档并进行一些检查并重写更改

我下载了node.js并初始化了Firebase,我也尝试在控制台中执行此操作,但是它没有此选项

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

const admin = require('firebase-admin');
admin.initializeApp();
// Create and Deploy Your First Cloud Functions
// https://firebase.google.com/docs/functions/write-firebase-functions

 exports.scheduledFunctionCrontab = functions.pubsub.schedule('0 0 6 * *')
//  .timeZone('America/New_York') // Users can choose timezone - default is America/Los_Angeles
  .onRun((context) => {

const overdueSnap = admin.firestore().collection('tasks')
  .where('overdue','==',false)
  .where('due_time', '=<', new Date()).getTime();

await Promise.all(overdueSnap.docs.map((doc) => doc.ref.update({color: true}));

console.log('This will be run every day at 6 AM Eastern!');
return null;

});

1 个答案:

答案 0 :(得分:0)

您的问题有点含糊,但是听起来您想做的就是查询所有过期的文档并进行更新。我假设您在due_time字段中将到期日期存储为Timestamps,并且您想在任务过期时将overdue字段标记为true。您可以执行以下操作:

exports.scheduledFunctionCrontab = functions.pubsub
  .schedule('0 0 6 * *')
  .onRun(async (context) => {
     const overdueSnap = await admin.firestore().collection('tasks')
       .where('overdue','==',false)
       .where('due_time' '<=', new Date()).get();

     await Promise.all(overdueSnap.docs.map((doc) => doc.ref.update({overdue: true}));
  });

此代码执行以下操作:

  1. 查找所有以前没有due_time标记为overdue的{​​{1}}的文档。
  2. 并行更新每个文档,将true设置为overdue

您的详细信息可能有所不同,但这是您要描述的问题类型的常规方法。