在Firebase中,如何使用单独的ORDER BY执行WHERE查询

时间:2015-11-07 01:18:26

标签: javascript firebase

使用firebase并尝试在SQL中执行查询:

`SELECT * FROM definitions WHERE author='joe' ORDER BY votes DESC`

但是,为了在firebase中执行equalTo,您必须具有您要订购的特定字段。两者必须相同。真的没有办法实现这个目标吗?

1 个答案:

答案 0 :(得分:1)

这可以做 - 有点。

这是一组数据样本

definitions
  -K2XaThTbq3iRnevjM4V
    author: "joe"
    votes: "5"
    sort: "joe_005"
  -K2XaThTbq3iRnevjM4W
    author:  "jay"
    votes: "100"
    sort: "jay_100"
  -K2XaThTbq3iRnevjM4X
    author: "joe"
    votes: "22"
    sort: "joe_022"

ObjC

Firebase *ref = [self.myRootRef childByAppendingPath:@"definitions"];

FQuery *q1 = [ref queryOrderedByChild:@"sort"];
FQuery *q2 = [q1 queryStartingAtValue:@"joe_"];

[q2 observeEventType:FEventTypeChildAdded withBlock:^(FDataSnapshot *snapshot) {

   NSLog(@"%@", snapshot.value);

}];

这将使作为作者的所有具有乔的孩子返回,按照投票数排序。

请记住,排序是对字符串值进行排序,因此joe_5将在joe_22(2小于5)之后出现。所以要补偿,用0&s填充投票,这样字符串的数字部分就是相同的长度。

如果是1000票,则失败,所以只需用足够的0来填补它就可以补偿。