Firebase数据库条件筛选查询失效:添加where后仍返回全部结果求助
Firebase动态查询无筛选效果的修复方案
问题根源在于Firestore查询实例是不可变的:调用orderBy()、where()等方法时,不会修改原查询对象,而是返回一个包含新条件的新查询实例。你的代码仅调用了这些方法,但未将返回值重新赋值给变量t,最终执行的仍是初始的savedTopifyPapers查询,因此不会应用筛选条件。
修复后的代码如下:
let t = savedTopifyPapers if (queryParams.value.key && queryParams.value.value) { // 将带筛选条件的新查询实例赋值给t t = t.orderBy('timeStamp') .limit(limit.value) .where(queryParams.value.key.toString(), '==', queryParams.value.value) } else { // 将基础查询的新实例赋值给t t = t.orderBy('timeStamp').limit(limit.value) } t.onSnapshot((snapshot) => { const _lastDoc = snapshot.docs[snapshot.docs.length - 1] firstVisible.value = snapshot.docs[0] if (_lastDoc) { lastDoc.value = _lastDoc } if (snapshot.empty) { loadingData.value = false } papersData.value = snapshot.docs.map((doc) => { const data = doc.data() const id = doc.id loadingData.value = false return { id, ...data } }) papersDataLength.value = papersData.value.length })
额外注意事项:
- 确认
savedTopifyPapers是正确的Firestore集合引用(例如firebase.firestore().collection('your-collection-name')) - 如果
orderBy和where使用的是不同字段,需要提前在Firestore控制台创建对应的复合索引,否则查询会抛出索引缺失的错误
内容的提问来源于stack exchange,提问作者Piyush Gehlot
相关产品推荐
相关产品推荐

