我试图计算我的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 :(得分:2)
查看Web API,每个快照都有numChildren()方法。这似乎是获得点数的明显首选。
API文档还表明.remove()不接受任何参数;所以不可能做任何.remove( /* first 30 */ );
的方式。
有人可能会尝试.limit(30).remove()
抓住前30个并对其进行删除,但不幸的是,limit()返回的Query对象并不支持remove()方法。 / p>
相反,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;
});
}
});