是否可以在Firebase上进行通配符查询?例如:
https://foo.firebaseio.com/person.json?orderBy="name"&equalTo="Lun*"
答案 0 :(得分:8)
我知道它已经有一段时间但我认为其他人可能会感兴趣。你可以"假"通配符搜索foo*
之类的东西(所以基本上你可以搜索以指定字符串开头的值)。
适用于iOS& Swift看起来像这样:
dbReference.child("person").queryOrdered(byChild: "name").queryStarting(atValue: "foo").queryEnding(atValue: "foo\u{f8ff}").observe(.childAdded) { (snapshot: FIRDataSnapshot) in
print("\(snapshot.key) - \(String(describing: snapshot.value))")
}
这样做是使用name
属性的开始值和结束值,其中结束键等于Unicode范围内的开始+非常高的代码点。因为它在Unicode之后的大多数常规字符之后,所以查询匹配以foo
开头的所有值。
答案 1 :(得分:2)
没有。但有点。
您无法执行通配符查询,但是,您可以构建允许此操作的数据。
例如,假设我们要为名称以Ler
开头的用户查找匹配项这是我们的结构
users
uid_0
name: "Leroy"
将分解的数据存储在另一个节点中:请记住,磁盘空间很便宜。
decomposed
uid_0
L: true
Le: true
Ler: true
Lero: true
Leroy: true
然后在分解的节点上执行查询,查找等于Ler
的子项的true值ref.queryOrderedByChild("Ler").queryEqualToValue(true).observeEventType(.ChildAdded,
withBlock: { snapshot in
print(snapshot.key)
})
snapshot.key将是uid_0
答案 2 :(得分:0)
你可以这样做。
确保按字母顺序排列搜索字段。
然后你搜索所有的名字(从Lun开始到罗结束),其中最后一个字母' o'用最初的最后一个字母计算' n' + 1。
我想你在这里看到了一般的想法。
所以它应该返回Lun *'之间的任何东西。并停留在'罗*'
的第一个条目https://foo.firebaseio.com/person.json?orderBy="name"&startAt="Lun"&endAt="Luo"
答案 3 :(得分:-5)
由于Firebase不支持通配符搜索,我决定选择Apigee BaaS作为我们公司。