代码之家  ›  专栏  ›  技术社区  ›  Peter Warbo

Firestore从数组创建复合查询

  •  -2
  • Peter Warbo  · 技术社区  · 7 年前

    我正在尝试创建一个复合查询来执行范围查询。

    let query;
    category.queryParams.query.fieldFilters.forEach(function(fieldFilter) {
        query = collection.where(fieldFilter.field, filterOperationString(fieldFilter.filterType), fieldFilter.filterValue);
    });
    

    我有一种感觉,查询需要被创建成链式的 collection.where().where()

    2 回复  |  直到 7 年前
        1
  •  0
  •   dizzzzy    7 年前

    据我所知,您有一个名为fieldFilters的数组,它包含多个具有field属性(例如“price”)、filterType属性(例如,“>”)和filterValue属性(例如50)的对象。如果您试图在不同的字段上执行多个范围查询,那么这将无法按照文档中的说明工作 https://firebase.google.com/docs/firestore/query-data/queries#compound_queries . 这个问题的解决方案确实存在,我建议您阅读Frank van Puffelen对以下问题的回答: Firestore multiple range query .

        2
  •  -1
  •   Peter Warbo    7 年前

    用这个代码解决了这个问题:

    let query;
    category.queryParams.query.fieldFilters.forEach(function(fieldFilter) {
        if (typeof query === "undefined") {
           query = collection.where(fieldFilter.field, filterOperationString(fieldFilter.filterType), fieldFilter.filterValue);
        } else {
           query = query.where(fieldFilter.field, filterOperationString(fieldFilter.filterType), fieldFilter.filterValue);
        }
    });