Flutter firestore插件无法使用where和isEqualTo的组合来获取数据

时间:2018-05-08 13:47:33

标签: firebase dart google-cloud-firestore flutter

我在Firestore中有一个名为“trip”的集合。数据格式是这样的

enter image description here

我正在尝试使用以下代码访问该Collection的文档。

第一种方式

try {
  Firestore.instance
      .collection("trips")
      .where("createdByName", isEqualTo: "Suresh")
      .snapshots
      .listen((data) => print('Firestore response1: ${data.documents}'));
} catch (e){
  print('Caught Firestore exception1');
  print(e);
}

第二种方式

try {
  Firestore.instance.collection("trips").where("createdByName", isEqualTo: "Suresh").getDocuments().then((data) {
    print('Firestore response2: , ${data.documents}');
  });
} catch (e){
  print('Caught Firestore exception2');
  print(e);
}

但是,上述两种方式都不起作用。不知道我做错了什么。

每当我从查询中删除where("createdByName", isEqualTo: "Suresh")部分时,我注意到的一件事情就是正常工作。但是,当我包含该部分查询时,返回一个空结果。

2 个答案:

答案 0 :(得分:1)

我不确定屏幕截图是否准确,但看起来您也有trip节点。这会将层次结构设为trips.trip.createdByName,不是吗?如果是这样,where子句可能是错误的。

答案 1 :(得分:0)

好的,经过两天让我的大脑因这个愚蠢的事情而破碎......这就是问题的答案...... .where('trip.createdByName', isEqualTo: "Suresh")

而且,完整的查询就是这样......

第一种方式

Firestore.instance.collection('trips')
  .where('trip.createdByName', isEqualTo: "Suresh")
  .snapshots.listen(
      (data){
        data.documents.forEach((doc) => print( 'Firestore response1 : ${doc.data.toString()}' ));
      }
  );

第二种方式

Firestore.instance.collection("trips")
  .where("trip.createdByName", isEqualTo: "Suresh")
  .getDocuments().then((string) {
    string.documents.forEach((doc) => print("Firestore response2: ${doc.data.toString()}" ));
  });

希望,这将是一个帮助。 :)