【问题标题】:Get a single document from Firebase Firestore query with Flutter使用 Flutter 从 Firebase Firestore 查询中获取单个文档
【发布时间】:2020-10-11 02:13:10
【问题描述】:

我知道这可能看起来很明显,但我就是找不到办法做到这一点..

我正在尝试从 firebase 查询中获取 单个文档。当我说单个文档时,我的意思是不是流

到目前为止,我的方法是:

MyClass getDocument(String myQueryString) {
    return Firestore.instance.collection('myCollection').where("someField", isEqualTo: myQueryString) //This will almost certainly return only one document
        .snapshots().listen(
            (querySnapshot) => _myClassFromSnapshot(querySnapshot.documents[0])
    );
  }

但是,我收到错误 A value of type 'StreamSubscription<QuerySnapshot>' can't be returned from method 'getDocument' because it has a return type of 'MyClass'.

谢谢!

【问题讨论】:

  • 你好,你试过了吗:databaseReference.collection('myCollection').getDocuments().then();
  • 听起来不错,但它缺少查询部分。它会类似于: databaseReference.collection('myCollection').where("field", isEqualTo: myString).then() 吗?如何只获取第一个文档?
  • databaseReference.collection("myCollection").getDocuments().then((onValue) { onValue.documents.forEach((f) { f[0] })});
  • @AndresSilva 如果您只需要查询结果中的第一个文档,请尝试将查询限制为 1 个结果,请使用“.limit()”

标签: flutter dart google-cloud-firestore stream dart-stream


【解决方案1】:

感谢您的回复,

我终于通过这样做让它工作了:

Future<MyClass> getDocument(String myQueryString) {
    return Firestore.instance.collection('myCollection')
        .where("someField", isEqualTo: myQueryString)
        .limit(1)
        .getDocuments()
        .then((value) {
            if(value.documents.length > 0){
              return _myClassFromSnapshot(value.documents[0]);
            } else {
              return null;
            }
          },
        );
  }

【讨论】:

    【解决方案2】:

    2021 年更新:

    var collection = FirebaseFirestore.instance.collection('myCollection');
    var querySnapshot = await collection 
        .where('someField', isEqualTo: queryString)
        .get();
    
    for (var snapshot in querySnapshot.docs) {
      Map<String, dynamic> data = snapshot.data();
    }
    

    您可以使用从地图对象中检索数据

    var fooValue = data['foo'];
    

    【讨论】:

      【解决方案3】:

      2021 年 Okt 更新

      var coll = Firestore.instance.collection('yourcollection');
      var qs = await coll.doc('yourdocument').get();
      Map<String,dynamic> value = qs.data();
      Map<String,dynamic> getField = jsonDecode(value['specific value in field']);
      var valueInfield = getField['data'];
      print($valueInfield);
      
                
      

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 1970-01-01
      • 2021-08-04
      • 2019-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多