簡體   English   中英

如何在谷歌實時數據庫中定位深度嵌套的 object?

[英]How can I target a deeply nested object in google realtime database?

我想做一個 cron 作業,刪除我的實時數據庫中超過 24 小時的深層嵌套對象。

我已經遍歷並到達了深層嵌套的 object,但我無法在 object 中獲取/定位“addTime”的值。 如何獲取該值以便可以在父級上運行.remove 到目前為止,它返回為未定義或拋出錯誤。

  .schedule("every 1 hours")
  .onRun(context => {
    const rootDatabaseRef = admin.database().ref("ghostData/");
    return rootDatabaseRef.ref.once("value").then(function(snapshot) {
      console.log("snap", snapshot.val());
      snapshot.forEach(function(userSnapshot) {
        let buckets = userSnapshot.val().buckets;
        console.log("buckets", buckets);
        buckets.forEach(function(bucket) {
          let currentTimeYesterday = new Date(
            new Date().getTime() - 24 * 60 * 60 * 1000
          ).getTime();
          let addedTime = bucket.val().addedTime;
          console.log("curr time", currentTimeYesterday);
          console.log("addedTime", addedTime);
        });
      });

這是我的實時數據庫中的數據以及來自無服務器雲功能的日志:

數據結構 日志1 日志2

我認為您在循環時遇到問題,因為當您執行此操作時,“buckets.forEach(function(bucket)”-> 在您的情況下,bucket 是列表的第一個元素,並且每個元素都有一個嵌套字典,所以首先您必須迭代字典,並且對於字典中的每個鍵,您將獲得另一個字典,並且您必須僅獲取附加時間值。

我知道這很難理解,但我認為它正在發生,因為你沒有正確循環。

試試下面的代碼或類似的代碼。

buckets.forEach(function(bucket){
   let currentTimeYesterday = new ......
   bucket.forEach(function(dict){
       Object.keys(dict).forEach(k => {
           console.log(k, ':', dict[k].addedTime);
           let addedTime = dict[k].addedTime;

       });
    ....
   }
  ....
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM