下面是我的代码块。我遍历了文档的集合,对于每个文档,我从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
});
});
}