Firestore v9+React按order字段获取指定文档异常求助
问题原因与修复方案
你的代码核心问题是没有正确构造Firestore查询。在Firestore v9模块化API中,必须使用query()函数将集合引用和查询条件(排序、过滤、限制等)组合成一个Query对象,再传给getDocs()。你当前的写法中,orderBy、startAt、limit这些参数会被getDocs()忽略,导致查询没有应用排序和过滤规则,返回的是集合默认顺序的第一条文档(刚好是order=1的那条)。
修正后的代码
首先确保已经导入query方法(如果还没导入的话):
import { collection, getDocs, query, orderBy, startAt, limit } from "firebase/firestore";
然后修改你的dbb函数:
const dbb = async (orderr) => { // 用query()组合集合与查询条件 const postsQuery = query( collection(db, 'posts'), orderBy("order"), startAt(orderr), limit(1) ) const querySnapshot = await getDocs(postsQuery) querySnapshot.forEach((doc) => { setTitle(doc.data().title) setTags(doc.data().tags) setSource(doc.data().source) setImgUrl(doc.data().imgUrl) setContent(doc.data().content) }) } useEffect(() => { dbb(2) }, [])
额外检查项
- 确认
order字段是数值类型(比如Number),如果是字符串类型,Firestore会按字典序排序,可能导致结果不符合预期(例如字符串"10"会排在"2"前面)。 - 验证你的Firestore数据库中确实存在
order值为2的文档,避免因数据缺失导致返回其他结果。
内容的提问来源于stack exchange,提问作者Maya Rahto
相关产品推荐
相关产品推荐

