我可能会想到这一点,但我想尝试采用最好的方法。
基本上我只希望每天发布一定数量的帖子。我将日期作为postedOn
键,其值类似于02-09-2016
。
我正在查询数据,以确保每天最多只有15个帖子。我正是这样做的:
checkForLessThanFifteen: function(){
var array = [];
console.log('checkforless')
var ref = new Firebase(rootUrl);
var date = moment().tz("America/Los_Angeles").format('YYYY-MM-DD');
ref.child('items').once('value', function(snapshot){
snapshot.forEach(function(childSnapshot){
if(childSnapshot.val().postedOn === date)
array.push(childSnapshot.val().songTitle);
})
console.log(array.length) //CODE RE ARRAY.LENGTH WILL GO HERE
})
}
这是一个合适的方法吗?我担心的是每次尝试发布帖子时都必须解析所有数据。有很多帖子会这么慢吗?有更好的方法吗?
答案 0 :(得分:3)
@ nicfo的答案将适用于日常情况,但如果您需要多天,将它们放入一个平面阵列将会有点困难。
相反,您可以执行以下数据结构:
{
"messages": {
"message_id": {
"timestamp": 1454832000000
}
}
}
然后您可以使用Firebase查询:
var ref = new Firebase('<>/messages');
var startAtDate = new Date(2016, 01, 07).getTime();
var endAtDate = new Date(2016,01, 08).getTime();
var query = ref.orderyByChild('timestamp').startAt(statAtDate).endAt(endAtDate);
query.on('child_added', function(snap) {
console.log(snap.val()); // data from 02/07/2016
});
这将对指定日期的消息进行范围查询。作为额外的奖励,如果您需要延长日期范围,只需更改startAt
和endAt
参数。
答案 1 :(得分:1)
你现在这样做的方式现在你每次阅读它都会阅读所有帖子。 为避免这种情况,您可以将它们分组:
+ items
+ 02.09.2016
+ post1
+ post2
+ ...
+ post15
+ 02.09.2016
+ post1
+ post2
+ ...
+ post15
+ ...
然后检查当天是否只有15个帖子:
var numberOfPosts = null;
var ref = new Firebase(rootUrl);
checkForLessThanFifteen = function(){
var date = moment().tz("America/Los_Angeles").format('DD.MM.YYYY');
ref.child('items').child(date).once('value', function(snapshot){
numberOfPosts = snapshot.numChildren();
console.log(numberOfPosts);
return numberOfPosts; // <- number of posts on that day.
}
}