You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 23:54:03