我正在遍历Firestore文件的集合。但是随着文档数量的增加,该功能呈指数级下降

时间:2020-06-14 02:37:45

标签: firebase flutter dart firebase-realtime-database google-cloud-firestore

下面是我的代码块。我遍历了文档的集合,对于每个文档,我从Firebase实时数据库中找到了一个相同的命名数据(与Firebase Realtime数据库等效的文档)。如果找不到这样的数据,我将从原始集合中删除该文档。如果找到数据,则检查“可用”字段。如果为假,则删除文档,否则,将新价格字段更新为实时数据库中的价格数据。

然后,我通过再次遍历文档并将所有新价格字段添加到称为“总计”的字段中来找到新价格的总计。 (更新后调用addNewPrice())

当集合中的文档很少时,这段代码实际上可以正常工作。但是,当文档数超过7-8时,更新总数的代码将变得非常缓慢。我要避免创建一些热点吗?如果将此功能部署为云功能,是否可以解决延迟问题?请为此提出解决方案。

(PS:我使用Dart语言)

       Firestore.instance
        .collection('/products')
        .snapshots()
        .listen((snapshot) { snapshot.documents.forEach((doc) async {

          List l;
          var d = await FirebaseDatabase.instance.reference().
          child("$databaseID").orderByChild('name').equalTo(doc['name']).once();

           if(d.value == null){

             removeElement(doc);
             }

           else{

             Map<dynamic, dynamic> v = d.value;
             l = v.values.toList();


             if(l[0]['Available'] == false)
             {
               removeElement(doc);
             }

             else{

               Firestore.instance
                 .collection('products').document(doc['name'])
                 .updateData({ 'newPrice' : _list[0]['price'] });

             }

           }

          });
        });


void addNewPrice() async {

    Firestore.instance
        .collection('/products')
        .snapshots()
        .listen((snapshot) async {

      double temp = snapshot.documents.fold(
          0, (tot, doc) => tot + (doc.data['newPrice']);

          await Firestore.instance
              .collection('OrgData').document('Details')
              .updateData({
            'Total': temp
          });

    });
  }


0 个答案:

没有答案