【问题标题】:How to perform compound OR operation in Firestore?如何在 Firestore 中执行复合 OR 操作?
【发布时间】:2020-07-11 13:43:39
【问题描述】:

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

查询:

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

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

【问题讨论】:

  • 我知道有 Array Contain Any 可以用作选项。但是我们每个查询只能使用一个 array-contains-any 子句。

标签: angular firebase google-cloud-firestore


【解决方案1】:

确实,正如您所提到的,每个查询不能使用多个 array-contains-any。正如此 Github issue 中的一位 Firebase 开发人员所提到的,这就是它未实现的原因:

我们目前不支持此功能,因为我们担心支持此类查询所需的索引行组合爆炸。我们不打算在短期内增加对此的支持。

考虑到,作为您使用的替代方案,我从社区here 找到了这篇文章,这表明用多个数组替换查询的两种可能性。

我认为您可以尝试的方法(如this answer 中所述)更适合您,首先将值预设为属性,以便您可以直接在代码中使用它们。代码示例如下所示。

    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 Question,以验证他们的所有澄清和解释。

如果这些信息对您有帮助,请告诉我!

【讨论】:

  • 动态创建查询?那么我们如何创建它的索引呢?
  • 嗨@JithinJoy 是的,可以使用动态查询进行索引。我建议您查看社区中的另外两个帖子 - herehere - 其中有如何实现它的示例。
  • 那些对我没有帮助的兄弟
  • 而那些实际上是在做 AND 操作吧?
  • 如果我想根据条件从 Firestore 获取所有眼镜 材料:[金属:真,醋酸:真,混合:fase] 形状:[矩形:真,方形:假,圆形:真]适合:[窄:真,中:真,宽:假,超宽:假]我做什么?
猜你喜欢
  • 2019-08-30
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
  • 2018-10-10
相关资源
最近更新 更多