Firestore使用orderBy排序score字段返回异常对象,无法获取数据
问题排查:Firestore排序查询返回异常对象无数据
你现在的代码只完成了构建查询对象这一步,并没有实际执行查询去拉取数据。Firestore的查询流程是先创建查询结构,再调用方法执行查询获取数据快照。
修正代码(Web版本9模块化API)
如果在异步函数中,直接用await getDocs()执行查询:
const ref = collection(db, "users") const q = query(ref, orderBy("score")); // 新增执行查询的核心代码 const querySnapshot = await getDocs(q); // 遍历快照获取每个文档的数据 querySnapshot.forEach((doc) => { console.log(`${doc.id} 的数据:`, doc.data()); });
如果无法使用await,可以用Promise链式调用:
const ref = collection(db, "users") const q = query(ref, orderBy("score")); getDocs(q) .then((querySnapshot) => { querySnapshot.forEach((doc) => { console.log(`${doc.id} 的数据:`, doc.data()); }); }) .catch((err) => { console.error("查询出错:", err); });
额外检查点
- 确认
users集合里的文档都有score字段,且类型统一(比如都是数字,别混着字符串类型,否则排序逻辑会异常) - 检查Firestore的安全规则,确保当前权限允许读取
users集合(如果规则限制了未授权读取,会返回权限错误) - 打印异常对象的具体信息,比如
console.log(异常对象),里面通常会包含错误原因,比如字段不存在、权限不足等
内容的提问来源于stack exchange,提问作者Tom Adurite
相关产品推荐
相关产品推荐

