Pluralsight课程中Firestore复合查询不生效问题求助
解决Firestore多条件查询只生效最后一个的问题
嘿,我一眼就看出问题所在啦!你现在的代码其实是创建了两个完全独立的查询,但只对最后一个查询设置了快照监听,所以自然只会返回最后那个条件的结果。
问题出在哪?
看你这段代码:
$('#yearsOfExperienceFilter').click(function () { employeesRef .where("yearsOfExperience", ">=", 8) .where("yearsOfExperience", "<=", 36) // 这里只是构建了查询,但没做任何后续执行操作 employeesRef .where("gender", "==", "Female") // 重新基于原始集合引用构建了新查询 .onSnapshot(function (querySnapshot) { LoadTableData(querySnapshot); }); });
第一个带年限条件的查询只是被创建出来,但你没有对它调用.onSnapshot()或者执行其他操作;紧接着你又基于原始的employeesRef创建了第二个带性别条件的查询,并且监听了它的快照——所以最终只有第二个查询会被执行,第一个完全被忽略了。
正确的写法:链式合并所有查询条件
Firestore的查询是通过链式调用来构建的,每个.where()都会返回一个新的查询对象,你需要把所有条件都串联起来,最后再添加快照监听:
$('#yearsOfExperienceFilter').click(function () { employeesRef .where("yearsOfExperience", ">=", 8) .where("yearsOfExperience", "<=", 36) .where("gender", "==", "Female") // 把性别条件也链式加入查询链 .onSnapshot(function (querySnapshot) { LoadTableData(querySnapshot); }); });
额外确认
既然你已经创建并启用了对应的复合索引,那这个合并后的查询应该就能正常返回同时满足两个条件的结果了。记得复合索引要包含yearsOfExperience和gender这两个字段,匹配你的查询过滤规则哦。
内容的提问来源于stack exchange,提问作者Craig Jacobs
相关产品推荐
相关产品推荐

