【问题标题】:Querying firestore using multiple in clauses使用多个 in 子句查询 Firestore
【发布时间】:2019-12-30 16:49:49
【问题描述】:

我正在开发一个产品列表页面(类似于任何电子商务网站),希望用户根据多个属性和每个属性的多个值来过滤产品。

假设数据模型如下图,

产品
类别 - 衬衫
尺寸 - 中号
颜色 - 蓝色

搜索页面上的下拉过滤器将是
1. 分类:衬衫、T 恤、长裤等
2. 尺寸:中、大等

当用户想要搜索所有中号和中号的衬衫和 T 恤时,我不知道如何查询 firestore?

firestore 不支持这样的查询,

Firebase.firestore().collection("Products")
    .where("Category", "in", ["Shirt, "T-Shirts"])
    .where("Size", "in", ["Medium", "Large"])

最重要的是,我需要对响应进行分页,因此在客户端进行过滤似乎不是一种选择。

如果有任何选择,请提出建议。

【问题讨论】:

    标签: firebase google-cloud-firestore


    【解决方案1】:

    由于查询中只能有一个 in 条件,因此您当前的方法将不起作用。我知道的唯一解决方法是保留一个单独的字段,其中每个值都是可用大小的组合。所以像:

    "available_in": "Medium_Large"
    

    然后查询:

    Firebase.firestore().collection("Products")
        .where("Category", "in", ["Shirt, "T-Shirts"])
        .where("available_in", "==", "Medium_Large")
    

    这种类型的解决方案只有在组合数量合理的情况下才有效,但这里似乎就是这种情况。

    【讨论】:

    • 感谢弗兰克的回答。我使用了很少的过滤器和值来解释场景,但我的真实应用程序有多个属性需要对其进行过滤,每个属性可以有 100 个可能的值。这看起来像是 Firestore 的一个严重限制,想知道如何使用 Firestore 构建/建模类似搜索页面的电子商务。
    猜你喜欢
    • 1970-01-01
    • 2014-10-15
    • 2018-11-21
    • 2021-02-03
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    相关资源
    最近更新 更多