【问题标题】:Loop trough real-time database and delete outdated data循环实时数据库,删除过期数据
【发布时间】:2022-12-01 05:07:57
【问题描述】:

我在我的实时数据库中存储基于日期的数据。日期范围从今天到一周前。在某些时候,我想遍历我的实时数据库并检查数据库中现在是否有任何日期已经过去,如果是,则删除它们及其子项。

我有一个最新日期数组,我可以通过遍历数据库中的所有日期并检查它是否存在于我的数组中来用作参考。我当前的解决方案如下所示,但给了我这个错误:TypeError: rootRef.once is not a function

function removeOldData() {
    let rootRef = ref(db, "/");
    rootRef.once("value")
      .then(function(snapshot) {
        snapshot.forEach(date => {
            let ref = ref(db, `${date}/`);
            if(!datesArr.includes(date)) {
                remove(ref)
                return;
            }
        })
    });
}

我是 firebase 的新手,我对 once() 的使用有点困惑。欢迎所有关于更好/更有效的方法的建议。谢谢!

【问题讨论】:

    标签: javascript firebase firebase-realtime-database


    【解决方案1】:

    您正在使用 Firebase 版本 8 和 9 语法的组合。

    根据您使用的版本,您可以执行以下操作:

    版本 8

    function removeOldData() {
        let rootRef = firebase.database().ref("/");
        rootRef.once("value")
          .then(function(snapshot) {
            snapshot.forEach(date => {
                let ref = ref(db, `${date}/`);
                if(!datesArr.includes(date)) {
                    remove(ref)
                    return;
                }
            })
        });
    }
    

    版本 9

    function removeOldData() {
        let rootRef = ref(db, "/");
        onValue(ref(db, '/users/' + userId), (snapshot) => {
            snapshot.forEach(date => {
                let ref = ref(db, `${date}/`);
                if(!datesArr.includes(date)) {
                    remove(ref)
                    return;
                }
            })
        }, {
          onlyOnce: true
        });
    }
    

    文档 https://firebase.google.com/docs/database/web/read-and-write#read_data_once_with_an_observer

    在某些情况下,您可能希望本地缓存中的值是 立即返回,而不是检查服务器上的更新值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-08
      • 2021-12-09
      • 2021-06-04
      • 1970-01-01
      • 2016-08-24
      相关资源
      最近更新 更多