Как объединить сумму идентичных пар ключ-значение в Firestore Query - PullRequest
0 голосов
/ 02 ноября 2019

У меня есть настройка базы данных 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получить ...

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

Я не уверен, как объединить сумму этих значений, хотя: (

1 Ответ

1 голос
/ 02 ноября 2019

Вы должны изменить свой код следующим образом:

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

Обратите внимание, что если вы планируете иметь тележкис большим количеством документов (например, заказов) вы можете использовать другой подход. Например, вы можете рассчитать сумму для каждой корзины с помощью облачной функции (каждый раз, когда в корзине создается новый документ), вместо того, чтобы запрашивать все документы корзины каждый раз, когда вы хотите получить сумму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...