我被卡住了。卡住是因为Firestore还不能处理我(对我来说)相对简单的查询。我不需要任何花哨的东西。我只希望从数据库中获得尚未结束的会议。但是,我希望列表限制为5个项目,并按会议的开始日期排序,以显示一个小的“下一个”样式的议程。
但是,以下查询无效:
where("end", "<", now), orderBy("start", "asc"), limit(5));
那么,我如何为我的议程实现这个相当简单的查询呢?
而且,既然我们在这里,也许我们也可以深入研究其他查询:
- 显示最后一次会议(已结束)
where("end", "<", now), orderBy("end", "desc"), limit(1))
- 显示当前会议(现在)-已开始,但未结束。
.... ?????
- 显示尚未开始的会议(下一步)
where("start", ">", now), orderBy("start", "asc"), limit(5))
对于“当前”,我现在唯一能想到的是获取所有已结束会议的数组。获取所有未来会议的数组,以及所有会议的数组。从(all)列表中减去(previous)和(future)数组,我将得到一个尚未结束但已经开始的会议。一定有更有效的方法来实现这一点。不是吗?
1条答案
按热度按时间brccelvz1#
常见的方法是定义时段,然后将每次会议分配给相关时段。
例如,假设您显示今天正在进行的事件,然后以不同的方式设置已经开始/结束的事件的样式。
在这种情况下,您可以有一个
meetings_days
数组,其中包含会议处于活动状态的日期:meeting_days: ['2022-12-01', '2022-12-02', '2022-12-03', '2022-12-04', '2022-12-05']
.现在,您可以使用
array-contains
过滤器来选择给定日期的事件,然后确定客户端应用程序代码中的样式。如果您没有显示所有事件(例如,没有显示已经完成的事件),则需要确定正确的存储桶大小,以在保持合理数据大小的同时限制过度读取。另一种数据模型可以是会议日期的五月:
meeting_days: { '2022-12-01': true, '2022-12-02': true, '2022-12-03': true, '2022-12-04': true, '2022-12-05': true }
。现在您可以执行AND
类型的查询,例如只查找运行12月前2天的事件。正确的数据模型取决于应用的用例,并可能随着应用的发展而改变/演变。