如何修改Flutter Firestore查询代码以获取仅过去一天的数据?
修改Firestore查询获取过去一天数据的方案
修改后的完整代码
先计算过去一天的时间戳,再添加对应的过滤条件:
// 计算当前时间往前推24小时的Timestamp final oneDayAgo = Timestamp.fromDate(DateTime.now().subtract(const Duration(hours: 24))); // 修改后的查询语句 FirebaseFirestore.instance .collection("Orders") .where('ostatus', isEqualTo: "4") .where('vid', isEqualTo: uid) .where('latestorder', isGreaterThanOrEqualTo: oneDayAgo) // 新增的时间过滤条件 .orderBy("latestorder", descending: true) .snapshots(),
关键修改说明
- 新增时间计算逻辑:用
DateTime.now().subtract(Duration(hours:24))得到过去一天的时间点,再转成Firestore的Timestamp类型(确保和latestorder字段的存储类型匹配,避免类型不匹配报错)。 - 添加时间过滤条件:通过
where('latestorder', isGreaterThanOrEqualTo: oneDayAgo)筛选出latestorder字段值在过去一天范围内的数据,实现仅获取最近一天订单的需求。 - 复合索引要求:因为同时使用多个
where条件和orderBy,需要在Firebase控制台的Firestore索引页面创建复合索引,索引字段包含ostatus、vid、latestorder,排序方式对应latestorder的降序设置,否则查询会抛出索引缺失的错误。
内容的提问来源于stack exchange,提问作者developer eeizo
相关产品推荐
相关产品推荐

