angular - 如何在 Firestore 中执行复合 OR 操作?
问题描述
我需要过滤大量数据。一个例子,我想根据他们提供的便利设施和他们的服务提供=d 来过滤来自 firestore 的健身房。便利设施和服务都是一个阵列。
询问:
Select all gyms From the database Where Amenities[wifi, pool] and Services[parking, yoga]
如何在基于 Firebase Firestore 的项目上执行此操作?
解决方案
array-contains-any
实际上,正如您所提到的,每个查询不能使用超过一个。正如其中一位 Firebase 开发人员在此 Github问题中所提到的,这就是它未实现的原因:
我们目前不支持此功能,因为我们担心支持此类查询所需的索引行组合爆炸。我们不打算在短期内增加对此的支持。
考虑到这一点,作为您使用的替代方法,我在此处的社区中找到了这篇文章,这表明用多个数组替换查询的两种可能性。
我认为您可以尝试的方法(如本答案中所述)更适合您,首先将值预设为属性,以便您可以直接在代码中使用它们。代码示例如下所示。
nAmenities = {
"wifi": true,
"pool": true,
...
}
nServices = {
"parking" = true,
"yoga" = true,
...
}
list.forEach( (val) => {
ref = ref.where(`nAmenities.${val}` , '==' , true);
ref2 = ref2.where(`nServices.${val}` , '==' , true);
//query of select using these above nAmenities and nServices variables
});
此代码未经测试,但我相信它可能会帮助您作为起点。除此之外,我真的鼓励你看看其他Stackoverflow 问题,以验证他们的所有澄清和解释。
让我知道这些信息是否对您有帮助!
推荐阅读
- azure - 在不丢失数据的情况下重新启动 Azure 流分析作业
- react-native - 无法将 weekCalendar 滚动到下/上个月 react-native-calendar
- c++ - GetModuleFileName() 没有给出正确的 DLL 路径
- odata - SAP云平台上的用户身份验证,用于未连接到SAP云的不同SAP系统上的业务用户
- reactjs - 有没有办法将 useSelector() 的结果作为道具传递给另一个组件?
- mysql - 不存在记录的多对多关系查询
- java - 在主函数中创建对象实例
- c++ - 如何在 C++ 中使用原子变量作为互斥锁?
- python - 由于 CUDA 错误,无法从 Keras 模型进行预测
- java - 如何从字符串中取出数字并消除这些数字并存储过滤后的字符串并在java中打印