【问题标题】:Flutter/Firebase Realtime database: how to use equalsTo?Flutter/Firebase 实时数据库:如何使用 equalsTo?
【发布时间】:2020-04-27 00:18:25
【问题描述】:

我的数据库结构如下所示:

final databaseReference = FirebaseDatabase.instance.reference();
databaseReference
    .child('orders')
    .equalTo(myUID, key: 'uid')
    .orderByChild(orderField)
    .limitToFirst(pageSize)
.once()
.then((snapshot) {

  // form current list
  List<dynamic> curretList = [];
  snapshot.value.forEach((orderId, orderData) {
      curretList.add(orderData);
  });

但以下查询返回空结果。

我怀疑错误在.equalTo(Provider.of&lt;AppData&gt;(context, listen: false).uid, key: 'uid')。我在这里正确使用了equalTo 吗?

【问题讨论】:

  • 什么是orderField
  • @FrankvanPuffelen 订单字段为negative_epoch

标签: firebase flutter firebase-realtime-database


【解决方案1】:

您尝试使用的equalTo 的第二个参数与您在此处需要的完全不同。

您正在寻找的是:

final databaseReference = FirebaseDatabase.instance.reference();
databaseReference
    .child('orders')
    .orderByChild('uid')
    .equalTo(myUID)
    .limitToFirst(pageSize)

因此,这将获取orders 的所有子节点,根据其uid 属性的值对它们进行排序,然后返回uid 值等于myUID 的第一个pageSize 节点。

由于每个查询只能有一个orderBy... 调用,这意味着您必须在应用程序代码中按时间戳对结果重新排序。另见Query based on multiple where clauses in Firebase

【讨论】:

  • 如果我想保持原来的排序顺序怎么办?
  • 另外,我有分页,所以在应用程序代码中排序不起作用!
  • Firebase 数据库查询只能对单个属性进行排序/过滤。在许多情况下,可以将要过滤的值组合成单个(合成)属性。有关此方法和其他方法的示例,请参阅我对所链接问题的回答。
猜你喜欢
  • 1970-01-01
  • 2021-07-03
  • 2022-08-05
  • 2022-08-20
  • 2020-10-18
  • 2021-04-22
  • 2020-09-13
  • 2021-07-01
  • 2021-04-09
相关资源
最近更新 更多