Firebase上的通配符查询?

时间:2016-04-01 20:18:09

标签: firebase firebase-realtime-database

是否可以在Firebase上进行通配符查询?例如:

https://foo.firebaseio.com/person.json?orderBy="name"&equalTo="Lun*"

4 个答案:

答案 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作为我们公司。