2014-10-18 26 views
0

我想要計算我的firebase數據庫中孩子的數量,並檢查是否有100個。如果是這樣,那麼應該刪除前30個。這是我的代碼。我不太確定我是否應該使用一個.remove()在這裏,但我把它放在那裏只是讓你可以得到什麼,我試圖做計算孩子的數量並刪除一些

// counts number of childs 
    myDataRef.on('value', function (snapshot) { 
     var count = 0; 
     snapshot.forEach(function() { 
      count++; 
     }); 
     // if childs are == 100, remove the first 30 
     if (count == 100) { 
      myDataRef.remove(/* first 30 */); 
     } 
    }); 

一個想法,一個小提琴: http://jsfiddle.net/y920s63h/

希望我已經清楚!謝謝。

+0

不計數部工作,或者你需要幫助的那個嗎? – DividedByZero 2014-10-18 21:37:16

+0

'snapshot.length' ...? – jAndy 2014-10-18 21:40:58

+0

計數似乎沒有工作,即使'snapshot.length' – NotToBrag 2014-10-18 21:56:14

回答

2

看着Web API,每個快照都有一個numChildren()方法可用。這似乎是獲得計數的明顯首選。

API文檔還顯示.remove()不帶任何參數;所以不會有辦法做任何形式的.remove(/* first 30 */);

可能會試圖嘗試.limit(30).remove()來抓住前30個,並對這些進行移除,但不幸的是,limit()返回的Query對象不支持remove()方法。

相反,numChildren的()和foreach()的組合似乎是最好的方法:

myDataRef.on('value', function (snapshot) { 
    if(snapshot.numChildren() >= 100) { 
     var i = 0; 
     snapshot.forEach(function(ss) { 
      ss.ref().remove(); 
      // returning true causes forEach() to stop iterating 
      // so we can use that to only grab 30 
      return ++i == 30; 
     }); 
    } 
});