Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 如何在Firestore查询中组合相同的键:值对之和_Firebase_Flutter_Dart_Google Cloud Firestore - Fatal编程技术网

Firebase 如何在Firestore查询中组合相同的键:值对之和

Firebase 如何在Firestore查询中组合相同的键:值对之和,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我有firestore数据库设置,其中的条目如下 Database/users/(userId)/cart/ - dT3897G5H9398T5H quantity: 1 - aG895T398HG509349 quantity: 3 - aG895T398HG509349 quantity: 6 我想得到这些量的总和。。。如果我这样做: QuerySnapshot snapshot = await Firestore.inst

我有firestore数据库设置,其中的条目如下

Database/users/(userId)/cart/
  - dT3897G5H9398T5H
       quantity: 1
  - aG895T398HG509349
       quantity: 3
  - aG895T398HG509349
       quantity: 6
我想得到这些量的总和。。。如果我这样做:

      QuerySnapshot snapshot = await Firestore.instance
          .collection('users')
          .document(userId)
          .collection('cart')
          .getDocuments();
      if (snapshot == null) {
        return;
      }
      snapshot.documents.forEach((doc) {
        var cartTotal;
        cartTotal = doc.data['quantity'];

        print(cartTotal);
我得到

I/flutter ( 5371): 1
I/flutter ( 5371): 3
I/flutter ( 5371): 6


我不知道如何组合这些值的总和:(

您应该按照以下行修改代码:

getCartTotal(String userId) async {

    var cartTotal = 0;

    QuerySnapshot snapshot = await Firestore.instance
        .collection('users')
        .document(userId)
        .collection('cart')
        .getDocuments();

    if (snapshot == null) {
      return;
    }

    snapshot.documents.forEach((doc) {
      cartTotal = cartTotal + doc.data['quantity'];
    });
    print(cartTotal);

  }
在当前代码中,对于
QuerySnapshot
中的每个文档,您是:

  • 声明
    cartotal
    变量
  • 将值分配给
    cartotal
  • 打印
    cartotal的值

  • 请注意,如果您计划使用包含大量文档(即订单)的购物车,您可以使用不同的方法。例如,您可以使用云函数计算每个购物车的金额(每次购物车中创建新文档时),而不是每次要获取金额时都查询购物车的所有文档。

    请尝试以下代码:

        return ref.collection('users').get().then(snapshot => {
            let total_count = 0;
            snapshot.forEach(doc => {
                total_count += Number(doc.data().quantity);
            });
    
            return total_count;
        });
    

    请避免使用新代码修改您的原始问题。这会妨碍其他读者理解您的确切问题。如果您想添加一些新代码,请将其添加到问题的底部,指明更改内容以及更改原因。谢谢!我已经调整了我答案的代码。但是,请注意,您不需要这样做如果(doc==null){return;},请执行
    ,因为“QueryDocumentSnapshot包含作为查询的一部分从Firestore数据库中的文档读取的数据。文档保证存在…查询结果仅包含现有文档”,请参阅