例如,如果我有这些用户:
Devid,Andy,Bob
我想让所有用户都拥有包含’D’的名称,所以我希望这样做:
Devid,Andy
这是我Firebase的结构:
由于Firebase区分大小写,因此我创建了一个包含小写名称的属性name_.
使用startAt和endAt我可以获得名称以定义的字符串开头的所有用户
ref.orderByChild("name_").startAt(text).endAt(text+"\uf8ff").on('value',...);
但是这只给了我那个名字以给定字符串开头的用户,例如,如果文本是’D’,我会得到:
Devid
1)目前我的查询意味着“给我所有的用户名称_以一个给定的字符串开头”有没有办法让它意味着“给我所有用户的名字包含给定的字符串”?
编辑:没有
Firebase Queries don’t have anything similar to full-text search
operators. To accomplish those,you’ll either have to integrate an
external full-text search engine,or come up with a very elaborate
custom indexing scheme. 07001
2)目前我不想拥有服务器端代码,实现自定义索引的有效方法是什么?
谢谢
然而,这只是突然出现在我脑海中:
users: user_1234 first_name: "Devid" components: "D": true "e": true "v": true "i": true "d": true user_5678 first_name: "Andy" components: "A": true "n": true "d": true "y": true user_1010 first_name: "Bob" components: "B": true "o": true "b": true
这里有一些ObjC代码可以实现(并且经过测试!)
Firebase *ref = [myRootRef childByAppendingPath:@"users"]; FQuery *q1 = [ref queryOrderedByChild:@"components/b"]; FQuery *q2 = [q1 queryEqualToValue:@1]; [q2 observeEventType:FEventTypeChildAdded withBlock:^(FDataSnapshot *snapshot) { NSLog(@"%@",snapshot.value); }];
此代码返回Bob.
要获得所有’d’人,请将“components / b”更改为“components / d”
编辑:
您可以变得非常疯狂并添加更多组合以扩展您的搜索功能
users: user_1234 first_name: "Devid" components: "D": true "e": true "v": true "i": true "d": true "De": true "Dev": true "Devi": true "Devid": true "ev": true "evi": true "evid": true ... etc
编写几行代码来迭代名称并写出组合会非常简单.
显然,如果只是将所有的名字读入快照,将它们转储到一个数组中,并且(在ObjC中)使用NSPredicate来提取你需要的东西,效率会更高(如果你有一个有限的数据集).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。