我的数据是这样的:
{
"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();
});
如何仅获得“类型”为“alpha”的对象?
最佳答案
您的members
引用与对象的List
相对应,并且List
中的直接子项都不是类似于"alpha"
的字符串,因此您的orderByValue().equalTo()
查询返回null
。您传递的"type"
参数是在列表中的索引(0
,1
等)上搜索,而不是在子对象("type"
,"name"
)中搜索键。
相反,您可以使用orderByChild()
:
DatabaseReference ref = database().ref().child('members').orderByChild("type").equalTo("alpha");
如果alpha不在开头,您可能会发现
List
中有一些孔:[{name: John, type: alpha}, null, {name: Jane, type: alpha}]
您可以使用以下方式删除
null
值: members = new List<Object>.from(members)..remove(null);
关于firebase - Firebase-Dart过滤数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46320796/