firebase - Firebase-Dart过滤数据

标签 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();
});

如何仅获得“类型”为“alpha”的对象?

最佳答案

您的members引用与对象的List相对应,并且List中的直接子项都不是类似于"alpha"的字符串,因此您的orderByValue().equalTo()查询返回null。您传递的"type"参数是在列表中的索引(01等)上搜索,而不是在子对象("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/

相关文章:

firebase - 在服务器端调用 firestore 时,用户对 cloud firestore 的访问和数据控制

ios - sharedApplication' 不可用 : not available on iOS (App Extension) - Use view controller based solutions where appropriate instead

java - 如何从与特定字符串匹配的云 Firestore 中搜索和获取文档

AngularFire 如何取消订阅 Firebase 实时数据库

dart - 如何在 Flutter 集成测试中最好地 stub /模拟 rest API 调用

flutter - 如何通过有状态小部件传递参数

flutter - 使用 'GeoLocator' 包时无法获取纬度和经度

firebase - 将 Firebase 添加到 Angular 2 英雄之旅教程

javascript - 有没有一种方法可以缩短字符串唯一 ID 数组,同时仍确保唯一性?

android - 结合使用 Firebase 和 Realm 时发生崩溃 - : Lio/reactivex/Observable; 的解析失败