亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

刪除2小時以上的火災數據

刪除2小時以上的火災數據

婷婷同學_ 2019-07-05 15:25:41
刪除2小時以上的火災數據我想刪除兩個小時以上的任何數據。目前,在客戶端,我循環遍歷所有數據,并在任何較舊的數據上運行DELETE。當我這樣做時,每次刪除某個內容時都會調用db.on(‘value’)函數。另外,只有在客戶端連接時才會刪除這些內容,如果兩個客戶端同時連接,會發生什么情況?我可以在哪里設置刪除舊數據的東西?我在JavaScriptDate.Now()創建的每個對象中都有一個時間戳。
查看完整描述

3 回答

?
海綿寶寶撒

TA貢獻1809條經驗 獲得超8個贊

Firebase不支持帶有動態參數的查詢,例如“兩小時前”。它能,會,可以但是,對特定值執行查詢,例如“2015年8月14日之后,7:27:32上午”。

這意味著您可以定期運行代碼片段來清理早于2小時的項。當時:

var ref = firebase.database().ref('/path/to/items/');var now = Date.now();var cutoff = now - 2 * 60 * 60 * 1000;
var old = ref.orderByChild('timestamp').endAt(cutoff).limitToLast(1);var listener = old.on('child_added', function(snapshot) {
    snapshot.ref.remove();});

你會注意到我用child_added而不是value,而我limitToLast(1)..當我刪除每個子程序時,Firebase將觸發一個child_added對于新的“最后”項,直到在截止點之后沒有更多的項為止。

更新如果您想在Firebase的云函數中運行此代碼:

exports.deleteOldItems = functions.database.ref('/path/to/items/{pushId}').onWrite((change, context) => {
  var ref = change.after.ref.parent; // reference to the items
  var now = Date.now();
  var cutoff = now - 2 * 60 * 60 * 1000;
  var oldItemsQuery = ref.orderByChild('timestamp').endAt(cutoff);
  return oldItemsQuery.once('value', function(snapshot) {
    // create a map with all children that need to be removed
    var updates = {};
    snapshot.forEach(function(child) {
      updates[child.key] = null
    });
    // execute all updates in one go and return the result to end the function
    return ref.update(updates);
  });});

每當數據被寫入時,此函數就會觸發。/path/to/items,因此,只有在修改數據時才會刪除子節點。

此代碼現在也可在functions-samples回購.


查看完整回答
反對 回復 2019-07-05
?
茅侃侃

TA貢獻1842條經驗 獲得超21個贊

你可以調查用Cron作業調度Firebase函數..該鏈接向您展示了如何安排FireBaseCloud函數以固定的速度運行。在計劃好的Firebase函數中,您可以使用此線程中的其他答案查詢舊數據并刪除它。


查看完整回答
反對 回復 2019-07-05
  • 3 回答
  • 0 關注
  • 591 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號