首页 > 解决方案 > 如何在 Firestore 中执行复合 OR 操作?

问题描述

我需要过滤大量数据。一个例子,我想根据他们提供的便利设施和他们的服务提供=d 来过滤来自 firestore 的健身房。便利设施和服务都是一个阵列。

询问:

Select all gyms From the database Where Amenities[wifi, pool] and Services[parking, yoga]

如何在基于 Firebase Firestore 的项目上执行此操作?

标签: angularfirebasegoogle-cloud-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 问题,以验证他们的所有澄清和解释。

让我知道这些信息是否对您有帮助!


推荐阅读