为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Firestore 中按日期和位置可用性进行过滤?

如何在 Firestore 中按日期和位置可用性进行过滤?

慕姐8265434 2021-11-18 15:56:49
在我的 Firebase 项目中,我需要查询在某个城市的某个日期有空的所有用户,并按其他一些标准进行排序。由于我们不能在一个查询中使用多个“数组包含”操作,我在 Firestore 中尝试了众所周知的“地图技巧”,但现在我向查询添加了排序,这不再是一种选择。let usersQuery = firestore.collection('Users')                        .where('availableInAreaCodes.12345', '==', true)                        .where('availableOnDates.2019-10-20', '==', true)                        .orderBy('level', 'asc');有任何想法吗?
查看完整描述

2 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

我发现在文档数量、非规范化和读/写使用之间进行了很好的权衡。

注意:此解决方案可能不适合您的方案。

我向每个用户文档添加了一个新的子集合“可用性”,并将可用性数据拆分为一年中的几周(旧文档每周删除,每周添加一个新文档)。

我将 areaCodes 添加为一个数组,将每个工作日添加为一个字段,并将一组缩减的用户数据添加到文档中。

我必须创建总共 44 个复合索引(11 个字段 * 4 个排序组合)。Firestore 的最大值是每个数据库 200。

在我的场景中,这是值得的,因为此查询是该应用程序的一个关键功能。

let usersQuery = firestore.collectionGroup('Availability')
                        .where('areaCodes', 'array-contains', 'DE-1234')
                        .where('weekYear', '==', '2019-W42'))
                        .where('monday', '==', 'available')
                        .orderBy('userPreview.level', 'asc'


查看完整回答
反对 回复 2021-11-18
?
MMTTMM

TA贡献1869条经验 获得超4个赞

您可以添加一个包含用户可用日期和区号组合的数组:

availableInAreaCodesOnDates:
  ["12345_2019-10-20", "94110_2019-10-20"]

然后您可以使用单个数组包含运算符来查询它。


查看完整回答
反对 回复 2021-11-18
  • 2 回答
  • 0 关注
  • 127 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信