首页 > 解决方案 > Flutter/Firebase 实时数据库:如何使用 equalsTo?

问题描述

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

在此处输入图像描述

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<AppData>(context, listen: false).uid, key: 'uid'). 我在这里使用equalTo正确吗?

标签: firebaseflutterfirebase-realtime-database

解决方案


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

您正在寻找的是:

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

所以这需要 的所有子节点orders,根据它们的属性值对它们进行排序uid,然后返回值等于的第一个pageSize节点。uidmyUID

由于每个查询只能orderBy...调用一次,这意味着您必须在应用程序代码中按时间戳对结果重新排序。另请参阅基于 Firebase 中多个 where 子句的查询


推荐阅读