【问题标题】:Firestore returns sorted list of docs when I only want to filter当我只想过滤时,Firestore 返回排序的文档列表
【发布时间】:2021-05-30 17:36:53
【问题描述】:

我正在构建一个电子商务应用程序。我使用 Firestore 作为我的数据库。我想根据类别和价格范围过滤产品。 Firebase 需要创建一个索引“类别升序价格升序”。我得到了属于该类别和给定价格范围内的产品列表。但是,返回的列表也是按价格排序的。

如何禁用按价格排序?

编辑: 我正在使用 FireSQL 来查询我的 Firestore 数据库。下面我包含了我的 React 应用程序的一部分。

    var sqlQuery = 'SELECT * FROM products WHERE';

    if(selectedCategories.length > 0) {
        var categoryQuery = "('" + selectedCategories.join("','") + "')";
        sqlQuery += ` category IN ${categoryQuery} AND`;
    }

    sqlQuery += ` (price >= ${PriceLowerBound} AND price <= ${PriceUpperBound})`

    fireSQL.query(sqlQuery).then(documents => {
        setProductList(documents);
    });

我目前有 4 种产品:

  1. product1:类别:“c1”,价格 189
  2. product2:类别:“c2”,价格 178
  3. product3:类别:“c1”,价格 128
  4. product4:类别:“c1”,价格 298

假设没有选择任何类别,那么查询将是 SELECT * FROM products WHERE (price >= 128 AND price ,我将按以下顺序获取产品:

  1. product3:类别:“c1”,价格 128
  2. product2:类别:“c2”,价格 178
  3. product1:类别:“c1”,价格 189
  4. product4:类别:“c1”,价格 298

当我第一次运行这个查询时,firebase 给了我一个错误和一个链接,我创建了以下索引:"category Ascending price Ascending"。由于这个索引,我得到了价格按升序排序的产品。不过,我希望能按之前的顺序获得产品。

我让用户能够更改 PriceLowerBound 和 PriceUpperBound,添加/删除要过滤的类别。我也想添加“ORDER BY price ASC/DESC”选项。所以,当我不写“ORDER BY”部分时,我不希望产品被排序。

【问题讨论】:

  • 请发布您到目前为止尝试过的内容

标签: firebase google-cloud-firestore


【解决方案1】:

您应该按照@Ashish 的建议发布您迄今为止尝试过的内容。我们甚至不知道您使用的是哪种语言。 :-)

但对于 Javascript,类似下面的内容将是一个开始。

let minPrice = 45;
let maxPrice = 300;
let productCat = "mugs";
const query = db.collection("products").where("price", ">=", minPrice).where("price", "<=" maxPrice).where("category", "==", productCat).get();

但这还不够。为了让 Firestore 保持快速查询,它需要在新索引中结合“类别”和“价格”。这是一个索引,其中类别和价格在一个长表中与相应的文档 ID 联系在一起。

换句话说,他们必须为您订购,以便您快速获得查询结果。

您的解决方案是在客户端以对您的业务案例有意义的方式再次订购它们。

如果您可以发布您的代码,我们可以为您提供一个示例,说明如何在客户端对您从 Firestore 获得的结果进行排序。

【讨论】:

    猜你喜欢
    • 2021-10-30
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多