首页 > 解决方案 > 如何在 Firestore 查询中组合相同键的总和:值对

问题描述

我有这样的条目的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

我不确定如何组合这些值的总和:(

标签: firebaseflutterdartgoogle-cloud-firestore

解决方案


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

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,您是:

  1. 声明cartTotal变量
  2. 赋值给cartTotal
  3. 打印值cartTotal

请注意,如果您计划拥有包含大量文档(即订单)的购物车,您可以使用不同的方法。例如,您可以使用 Cloud Function 计算每个购物车的总和(每次在购物车中创建一个新文档时),而不是每次想要获得总和时查询购物车的所有文档。


推荐阅读