我想检索包含特定键的所有条目。 Firebase 条目由两个连接在一起的键组成。在此示例中,我想检索包含键
abc123
的所有条目。
Database:
- xyz123abc123
- abc123uvw123
代码:
String searchForKey = abc123
FirebaseDatabase.instance.ref()
.child("note")
.orderByKey()
.equalTo(searchForKey*).once() //something like that
.then((DatabaseEvent databaseEvent){
Map<dynamic, dynamic> values = databaseEvent.snapshot.value as Map<dynamic, dynamic>;
values.forEach((key,values) {
//...
});
我认为您正在寻找的是一种
endsWith()
方法。但是,Firebase 不支持此类操作。除此之外,Firebase 中没有通配符。所以你不能使用这样的东西:
FirebaseDatabase.instance.ref()
.child("note")
.orderByKey()
.equalTo(searchForKey*).once()
// 👆
实时数据库查询只能进行前缀匹配,即查找以某个子字符串开头的字符串。目前没有后缀匹配的操作。
在像您这样的情况下,常见的解决方法是在单个节点下添加两个属性。第一个将包含代码,第二个将包含反转的代码:
db
|
--- notes
|
--- nodeId
|
--- code: xyz123abc123
|
--- reverse: 321cba321zyx
然后查询两次,一次使用
abc123
,第二次使用反向321cba
,并在客户端连接结果:
FirebaseDatabase.instance.ref()
.child("notes")
.orderByChild("code")
.startAt("abc123").endAt("abc123\uf8ff")
第二个查询:
FirebaseDatabase.instance.ref()
.child("notes")
.orderByChild("reverse")
.startAt("321cba").endAt("321cba\uf8ff")
为了能够获得所需的结果,请注意查询是按值排序的,而不是按键排序的。