我的数据是这样的:
{
"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”的对象?
答案 0 :(得分:1)
您的members
引用对应List
个对象,List
中的所有子项都不是"alpha"
之类的字符串,因此您的orderByValue().equalTo()
查询返回null
。您传递的"type"
参数是搜索列表中的索引(0
,1
等)而不是子对象中的键("type"
, "name"
)。
相反,您可以使用orderByChild()
:
DatabaseReference ref = database().ref().child('members').orderByChild("type").equalTo("alpha");
如果alphas不在开头,你可能会发现你的List
有一些漏洞:
[{name: John, type: alpha}, null, {name: Jane, type: alpha}]
您可以使用
删除null
值
members = new List<Object>.from(members)..remove(null);