Firebase Dart过滤数据
我的数据是这样的:Firebase Dart过滤数据,firebase,firebase-realtime-database,dart,Firebase,Firebase Realtime Database,Dart,我的数据是这样的: { "members": [ { "type": "alpha", "name": "John" }, { "type": "alpha", "name": "Jane" }, { "type": "beta", "name": "Renata" }, { "type": "beta", "name": "Richa
{
"members": [
{
"type": "alpha",
"name": "John"
},
{
"type": "alpha",
"name": "Jane"
},
{
"type": "beta",
"name": "Renata"
},
{
"type": "beta",
"name": "Richard"
}
]
}
如果我按以下方式访问它,我将获得所有成员的列表:
DatabaseReference ref = database().ref('members')
ref.onValue.listen((e) {
var members = e.snapshot.val();
});
但是,如果我尝试过滤数据,如下所示,我会得到null
DatabaseReference ref = database().ref('members').orderByValue().equalTo("alpha", "type");
ref.onValue.listen((e) {
var members = e.snapshot.val();
});
如何仅获取具有“type”“alpha”的对象?您的
成员
引用对应于对象的列表
,并且列表
中的直接子对象都不是类似“alpha”
的字符串,因此您的orderByValue().equalTo()
查询返回null
。您传递的“type”
参数正在搜索列表中的索引(0
,1
,等等),而不是子对象中的键(“type”
,“name”
)
相反,您可以使用orderByChild()
:
如果字母不在开头,您可能会发现一个带有一些孔的列表:
[{name: John, type: alpha}, null, {name: Jane, type: alpha}]
您可以使用删除null
值
members = new List<Object>.from(members)..remove(null);
members=new List.from(members)…remove(null);
您的成员
引用对应于对象的列表
,并且列表
中的直接子项都不是类似于“alpha”
的字符串,因此您的orderByValue().equalTo()
查询返回null
。您传递的“type”
参数正在搜索列表中的索引(0
,1
,等等),而不是子对象中的键(“type”
,“name”
)
相反,您可以使用orderByChild()
:
如果字母不在开头,您可能会发现一个带有一些孔的列表:
[{name: John, type: alpha}, null, {name: Jane, type: alpha}]
您可以使用删除null
值
members = new List<Object>.from(members)..remove(null);
members=new List.from(members)…remove(null);