Firebase-Dart过滤数据

时间:2017-09-20 11:26:27

标签: firebase firebase-realtime-database dart

我的数据是这样的:

{
  "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”的对象?

1 个答案:

答案 0 :(得分:1)

您的members引用对应List个对象,List中的所有子项都不是"alpha"之类的字符串,因此您的orderByValue().equalTo()查询返回null。您传递的"type"参数是搜索列表中的索引(01等)而不是子对象中的键("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);