【发布时间】:2021-10-21 22:56:32
【问题描述】:
我正在使用带有 Firestore 后端的 Swift 在 IOS 上构建日历。
我一次检索一个月中每一天的所有事件。
目前我只能显示在特定日期开始的事件。
如果活动在周五晚上开始并在周一早上结束(想想周末假期),那就不好了。
所以...
我需要从 Firestore 获取所有 Event 文档,其中当前填充事件的日期位于 Firestore 文档上 start 和 end 字段的时间戳之间。
显而易见的首选是这样的:
db.collection("Event")
.whereField("user", isEqualTo: userID)
.whereField("start", isLessThanOrEqualTo: thisDate)
.whereField("end", isGreaterThanOrEqualTo: thisDate)
.getDocuments()
但事实证明,Firebase 不允许我在不同的字段上运行 2 个不等式过滤器 [:(
我能想到的唯一其他选择是获取今天之前开始的所有事件,扫描每个事件并检查它是否在今天之前结束,然后显示其余的。
但这似乎不是很有效,特别是如果您考虑到 5 年后用户可能在一年中的每一天都有一个事件(那是 很多 文档要检查在很短的时间内通过)。
有人对我如何做这件事有任何建议吗?
谢谢:)
更新
我忘了添加这个,这是数据库结构的屏幕截图:)
(请注意,day、month 和 year 是过时的字段,因为我已经开始使用时间戳)
【问题讨论】:
-
如果不按
end字段过滤,您的查询是否有效?如果是,请您详细说明为什么这种方法不适合您? -
将事件填充到日历上的函数循环遍历“天”数组(28、30 或 31 次,具体取决于月份)...我只想检索当前日期在开始时间和结束时间之间或之间.....
-
@FaridShumbar 如果我错了请纠正我,但如果我认为规模较大,我不想通过检索在
now之前具有start时间的每个事件来减慢应用程序的速度(从现在起 10 年后,对于 1 个用户来说,这可能是多少个文档?...加上用户被邀请参加的事件)...在查询中指定end时间将消除所有已经结束的事件,减少对应用的需求
标签: swift firebase google-cloud-firestore