升级Firebase模块化版本后array-contains-any查询失效求助
解决Firebase模块化版本中array-contains-any查询报错问题
升级Firebase到模块化版本后,原正常运行的array-contains-any查询抛出错误:Firebase: Uncaught (in promise) TypeError: V is not a function。
报错代码
const q = query(usersCollection, where("interests", "array-contains-any", [route.params.filter])); const users = []; const snapshot = await getDocs(q); snapshot.docs.forEach((s) => { if(!interacted.includes(s.data().email)){ users.push(s.data()); } });
旧版本正常代码
var snapshot = await store.collection("users").where("interests", "array-contains-any", [route.params.filter]).get()
解决方法
- 校验查询参数有效性
模块化Firestore对array-contains-any的参数要求更严格,必须传入包含至少一个非空元素的数组。先确认route.params.filter不是undefined、null或空字符串:
const filterVal = route.params.filter; // 空值直接返回,避免无效查询 if (!filterVal) { return []; } // 执行查询 const q = query(usersCollection, where("interests", "array-contains-any", [filterVal])); const snapshot = await getDocs(q); // 后续处理逻辑不变
- 确认SDK导入正确性
确保query、where、getDocs均从Firebase Firestore模块正确导入:
import { query, where, getDocs, collection } from "firebase/firestore";
- 排查参数类型
如果route.params.filter本身是数组类型,无需再包裹一层数组。但从旧代码逻辑看,这里应该是单个值,所以只需保证该值有效即可。
内容的提问来源于stack exchange,提问作者chackerian
相关产品推荐
相关产品推荐

