Firebase Version 9实现多条件动态where查询的最优方案咨询
解决方案
你可以通过动态收集查询约束+展开传参的方式实现和v8完全一致的条件查询逻辑,无需添加冗余字段,也不需要占位where条件:
实现代码
// 1. 初始化查询约束数组,先放入固定的排序规则 const queryConstraints = [orderBy("timestamp")] // 2. 按需添加条件where子句 if (filters.selectedStaff) { queryConstraints.push(where("id", "==", filters.selectedStaff.id)) } if (filters.selectedStudent) { queryConstraints.push(where("studentIDs", "array-contains", filters.selectedStudent.id)) } // 3. 用展开运算符将约束数组传入query函数,生成最终查询 const finalQuery = query(collection(db, "collectionName"), ...queryConstraints)
说明
Firebase v9的query函数本身支持传入任意数量的查询约束实例,包括where、orderBy、limit、startAt等所有查询操作符。你只需要把所有查询规则先存到数组中,根据过滤条件动态增删数组成员,最后用ES6的展开运算符...把数组元素作为独立参数传给query即可,逻辑和你v8版本的链式条件判断完全对齐,也不会触发额外的索引限制要求,原本的timestamp排序规则不受任何影响。
内容的提问来源于stack exchange,提问作者RyanY
相关产品推荐
相关产品推荐

