【问题标题】:Firebase Firestore compound query variationsFirebase Firestore 复合查询变体
【发布时间】:2018-10-08 23:05:05
【问题描述】:

我有一个动态构造的 Firestore 查询,如下所示:

    let db = firebase.firestore().collection('vehData')

    if (this.filters.model.selected) {
      db = db.where('Model', '==', this.filters.model.selected)
    }

    if (this.filters.condition.selected) {
      db = db.where('TitleStatus', '==', this.filters.condition.selected)
    }

    if (this.filters.year.selected) {
      db = db.where('Year', '==', this.filters.year.selected)
    }

    if (this.filters.autopilot.selected) {
      db = db.where('Autopilot', '==', this.filters.autopilot.selected)
    }

    if (this.filters.battery.selected) {
      db = db.where('Battery', '==', this.filters.battery.selected)
    }

    if (this.filters.sortBy.selected) {
      db = db.orderBy(this.filters.sortBy.selected, this.filters.sortBy.ascOrDesc)
    }

    db.limit(200).get().then((querySnapshot) => { ... })

this.filters 只是一组选择输入的数据模型。

然而,问题是 Firebase 坚持我为上述查询的每一个变体都设置了一个复合索引,例如: Model ASC TitleStatus ASCModel ASC TitleStatus ASC Year ASCModel ASC TitleStatus ASC Year ASC Autopilot ASC

为每个场景/可能的过滤器组合创建索引显然不是一种选择,有没有人有任何关于如何绕过这个限制的提示?

【问题讨论】:

    标签: javascript firebase google-cloud-firestore


    【解决方案1】:

    没有在 Firestore 中创建必要索引的解决方法。 Firestore 可大规模扩展的唯一方法是要求每个查询都使用索引。

    如果您不关心通过单击错误消息中的链接来手动创建每个索引的过程,您可以构建一个 Firestore 规则文件以由 Firebase CLI 部署。可以编写一些代码来自动计算和填充文件。完成后,您将不再需要手动创建索引,而是使用 CLI 一次性部署规则。

    当您使用 CLI 初始化一个新的项目空间时,告诉它您要初始化 Firestore,它会生成一个基本的 json 文件供您修改和部署。通常,您会将 Firebase CLI 项目文件签入源代码管理。

    【讨论】:

    • 一个想法是,如果您输入的查询值是虚假的,即使您将它们链接在一起,也不应该运行该查询。例如:const name = 'Cyrus' const age = null const like = 'code'const ref = db.where('name', '==', name) .where('age', '==',age) .where('like','==',like).get(); 它应该读到它将使用名称和类似查询,但忽略年龄查询。我认为那会很有用
    【解决方案2】:

    我创建了一个脚本来通过 JavaScript 循环遍历我的查询的所有可能变体,因为索引表示为 JSON,一旦我将逻辑放在一起排列我的查询,创建一个简化的过程是微不足道的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-17
      • 2020-10-10
      相关资源
      最近更新 更多