如何根据特定时间在Firebase数据库中删除项目

时间:2019-02-11 10:55:06

标签: java android firebase firebase-realtime-database google-cloud-functions

我正在用Java创建一个Android应用程序,该应用程序允许用户创建交换请求,当我的swapShiftdate到达日期时,我想从实时数据库中删除该请求。这样我就可以不断释放数据库。 假设用户在周一创建了掉期,而掉期的日期是现实生活中的星期四。应该在星期四到来时从数据库中删除掉交换,这样用户就不会再看到它了。我希望有一种方法可以帮助我根据屏幕快照中显示的日期将其删除。

enter image description here

1 个答案:

答案 0 :(得分:1)

如果您想根据swaps字段值每天检查是否有swapperShiftDay个要删除的内容,如果是这种情况,请删除它们,您可以编写一个HTTPS Cloud Function作为跟随并每天通过https://cron-job.org/en/

这样的在线cron作业来调用它

HTTPS云功能如下:

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

admin.initializeApp();

exports.deleteSwaps = functions
  .https.onRequest((req, res) => {

      const dbRef = admin.database().ref('swaps/shift_swaps').orderByChild("swapperShiftDay").equalTo(getTodayDateString());
      dbRef.once('value')
              .then(snapshot => {
                  var updates = {};
                  snapshot.forEach(childSnapshot => {
                      key = childSnapshot.key;
                      updates['swaps/shift_swaps/' + key] = null;
                  });
                  return firebase.database().ref().update(updates);
              })
              .then(() => {
                  res.send({ msg: 'Success' });
              })
              .catch(err => {
                  res.status(500).send({Error: err});
              });
  });

function getTodayDateString() {
  var d = new Date();
  var weekday = new Array(7);
  weekday[0] = "Sunday";
  weekday[1] = "Monday";
  weekday[2] = "Tuesday";
  weekday[3] = "Wednesday";
  weekday[4] = "Thursday";
  weekday[5] = "Friday";
  weekday[6] = "Saturday";

  return weekday[d.getDay()];
}