代码之家  ›  专栏  ›  技术社区  ›  fyllepo

Firebase Firestore复合查询变体

  •  0
  • fyllepo  · 技术社区  · 6 年前

    我有一个动态构造的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

    Model ASC TitleStatus ASC 或者 Model ASC TitleStatus ASC Year ASC 或者 Model ASC TitleStatus ASC Year ASC Autopilot ASC

    为每个场景/可能的过滤器组合建立索引显然不是一个选择,有人知道我如何绕过这个限制吗?

    2 回复  |  直到 6 年前
        1
  •  0
  •   Doug Stevenson    6 年前

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

    如果您不关心通过单击错误消息中的链接来手动创建每个索引的过程,那么您可以构建一个Firestore规则文件,由 Firebase CLI

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

        2
  •  0
  •   fyllepo    6 年前