【发布时间】:2017-02-10 11:35:03
【问题描述】:
Firebase 数据:
{
"data": {
"entry-1": {
"created": 1484634400,
"status": 1
},
"entry-2": {
"created": 1482612312,
"status": 0
},
"entry-3": {
"created": 1481623400,
"status": 1
},
"entry-4": {
"created": 1485613233,
"status": 1
},
"entry-5": {
"created": 1489513532,
"status": 0
},
"entry-6": {
"created": 1483123532,
"status": 1
},
"entry-7": {
"created": 1481282376,
"status": 1
},
"entry-8": {
"created": 1432321336,
"status": 1
},
"entry-9": {
"created": 1464282376,
"status": 0
}
}
}
我正在尝试计算在entry-4 之前创建了多少活动条目 (status = 1),并实时更新计数。
今天我听数据库的每一个变化,但它消耗了大量不必要的数据。有没有更好的方法来做到这一点?
代码:
FIRDatabaseQuery *query = [self.firebase child:@"data"];
[query observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {
int count = 0;
for (FIRDataSnapshot *child in snapshot.children) {
if (child.value[@"status"] == 1 && child.value[@"created"] < 1485613233) {
count++;
}
}
}];
【问题讨论】:
-
Firebase 数据库中没有计数运算符。为了避免必须下载所有项目来获得计数,您可以保留一个单独的
count节点 - 然后您可以通过事务进行更新。见stackoverflow.com/questions/15148803/… -
Firebase 最近发布了 Cloud Functions。看看这个answer了解更多详情
标签: ios objective-c firebase firebase-realtime-database