Firebase中如何使用.where方法?调用时提示不是函数是什么原因?
错误原因
- 自定义函数传参错误:你定义的
getCollection仅接收1个name参数,但调用时传入了db、'chars'两个参数,导致实际执行collection(db, name)时,第二个参数拿到的是db对象而非预期的集合名,返回的不是合法的集合引用。 - 变量命名冲突:你把获取到的集合引用变量命名为
collection,和从Firebase SDK导入的collection工具函数重名,极易引发后续调用异常。 - Firestore 模块化API用法错误:v9及以上版本的Firebase SDK采用模块化设计,
where是需要单独导入的查询构造函数,不是集合引用对象的内置方法,不支持直接链式调用.where()。 await用法错误:构造查询语句不需要加await,只有调用getDocs、onSnapshot等实际触发网络请求获取数据的方法时才需要异步等待。
修正后的代码示例
// 先确认导入需要的API import { getFirestore, collection, where, query, getDocs } from "firebase/firestore"; const db = getFirestore(app) // 函数内部已经引用了外部的db实例,不需要额外传参 const getCollection = name => collection(db, name) // 修改变量名避免冲突,仅传入集合名参数 const charsCol = getCollection('chars') // 用模块化语法构造查询 const q = query(charsCol, where('name', '==', value)) // 实际请求数据时再加await const querySnapshot = await getDocs(q)
内容的提问来源于stack exchange,提问作者react1
相关产品推荐
相关产品推荐

