簡體   English   中英

計算集合 Firestore 中具有特定字段的文檔數 Flutter

[英]Count number of documents with a particular field in a collection Firestore Flutter

我在 flutter 中制作了一個應用程序,它使用 Flutter 將我的用戶數據保存在 Firestore 中。我制作了一個名為“Result”的集合,其中包含多個文檔,每個文檔都有一個結果為“Normal”或“COVID”的文檔。 我想要做的是計算結果為 COVID 的所有人,並將其顯示在我的 flutter 應用程序中。

CollectionReference reference= (await FirebaseFirestore.instance.collection('Result').add({
  "date" :Timestamp.now().millisecondsSinceEpoch.toString(),
  "result": _results[0]["label"],
})) as CollectionReference<Object?>;

簡而言之,我期待這樣的事情:

下面的代碼打印,記錄是 3

void Result() async{
  var query = FirebaseFirestore.instance.collection("Result");
  var snapshot = await query.get();
  var count = snapshot.size;
  print(' Records are $count');   //Records are 3
}

當我按下生成報告時,我希望結果 function 顯示此計數。 希望現在我有點清楚了。

    enter code hereimport 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

class GenerateReport extends StatefulWidget {
  const GenerateReport({Key? key}) : super(key: key);

  @override
  State<GenerateReport> createState() => _GenerateReportState();
}

class _GenerateReportState extends State<GenerateReport> {

  //final fireStore= FirebaseFirestore.instance.collection('Result').where('result' , isEqualTo: 'COVID').count('result').snapshots();
  final fireStore= FirebaseFirestore.instance.collection('Result').snapshots();

  Result() async{
    var query = await FirebaseFirestore.instance.collection("Result").where('result' , isEqualTo: 'COVID');
    var snapshot = await query.get();
    var count = snapshot.size; //return count;
    print ('RESULTS ARE  $count');
  }
  /* print(' Records are $count');  return Text ('Normal  : $count',);//Records are 3 Future<Text> Result() async{*/


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        centerTitle: true,
        title: const Text('Generate Report'),
        flexibleSpace: Container(
          decoration: const BoxDecoration(
            gradient: LinearGradient(
                begin: FractionalOffset.topCenter,
                end: FractionalOffset.bottomCenter,
                colors: <Color>[
                  Color.fromRGBO(47, 75, 104, 0.7),
                  Color.fromRGBO(47, 75, 104, 1)
                ]),
          ),
        ),
        backgroundColor: Colors.transparent,
      ),
      //centerTitle: true,
      // backgroundColor: const Color.fromRGBO(47, 75, 104,1),
      body: Center(
        child: Column(
          children: <Widget>[
            const SizedBox(
              height: 200,
            ),
            ElevatedButton(
              onPressed: Result,
              child: const Text('Generate Report'),
              /*async {
                  FirebaseFirestore.instance.collection('Result').get().then((QuerySnapshot querySnapshot) {
                    querySnapshot.docs.forEach((doc) {
                      print(doc["result"]);
                    });
                  });
                }*/
            ),
            //Result();
            StreamBuilder<QuerySnapshot>(
                stream: fireStore,
                builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
                  if (snapshot.connectionState == ConnectionState.waiting) {
                    return const CircularProgressIndicator();
                  }
                  if (snapshot.hasError) {
                    return const Text('Some error ');
                  }
                  return Expanded(
                    child: ListView.builder(
                        itemCount: snapshot.data!.docs.length,
                        itemBuilder: (context, index) {
                          return ListTile(
                            title: Text(snapshot.data!.docs[index]['result'].toString()),     //shows list of results
                          );
                        }),
                  );
                }
            ),
          ],
        ),
      ),
    );
  }

}


在這里我可以看到結果列表而不是確切的計數應用程序

您需要在該集合的where應用過濾器查詢,請使用:

 void Result() async{
  var query = FirebaseFirestore.instance.collection("Result").where("result", isEqualTo: "COVID");
  var snapshot = await query.get();
  var count = snapshot.size;
  print(' Records are $count');  
}

現在它應該獲取並打印result字段中具有“COVID”值的文檔的計數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM