0

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

我正在尝试从 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'.

谢谢!

4

3 回答 3

4

感谢您的回复,

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

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;
            }
          },
        );
  }
于 2020-06-21T21:50:22.483 回答
1

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'];
于 2021-06-06T16:17:43.183 回答
0

更新 Okt 2021

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);

          
于 2021-10-07T01:59:49.057 回答