firebase - 如何在 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
我不确定如何组合这些值的总和:(
解决方案
您应该按照以下几行修改您的代码:
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
,您是:
- 声明
cartTotal
变量 - 赋值给
cartTotal
- 打印值
cartTotal
请注意,如果您计划拥有包含大量文档(即订单)的购物车,您可以使用不同的方法。例如,您可以使用 Cloud Function 计算每个购物车的总和(每次在购物车中创建一个新文档时),而不是每次想要获得总和时查询购物车的所有文档。
推荐阅读
- kotlin - kotlin 和 kotlinc 报告不同的版本
- c - char * 在 arm 组件中输出
- matlab - 提取由 pdetool 生成的网格的最长边
- python - 如何在Python中将字典键作为函数参数传递
- python - TensorFlow 1.6 中的随机森林
- angular - 如何订阅 ElementRef.nativeElement 属性的更改?
- sql-server - 重新启动后 tempdb 未释放可用空间
- javascript - 在 Javascript 中定义链式字符串转换函数
- r - 如何将多个嵌套括号与指数一起使用?
- google-api - 服务帐户权限:仅限于特定的 GA API