我试图从firebase中获取分页的数据。
我的问题位于dataRef变量中。我想在查询中传递几个条件,例如:where('category', '==', 'men') where('id', '>', '50') where('price', '>', '100')
.
然后按id对最终结果进行排序
并使用startAt和endAt进行分页。
如果我注解掉这三行代码就可以工作了。否则我得到一个空数组。有谁知道firebase是否提供了其他解决方案,或者知道如何做到这一点?orderBy('id'), startAt(49), endAt(69)
const queryConditions = categoryQuery.map((query) =>
where(query.fieldPath, query.opStr, query.value)
);
const dataRef = query(
collection(firestore, 'shirts'),
// or(...queryConditions),
and(where('category', '==', 'men'), where('id', '==', 11)),
orderBy('id'),
startAt(49),
endAt(69)
);
const snapshot = await getDocs(dataRef);
const data = snapshot.docs.map((doc) => doc.data());
const validatedData = productsListSchema.safeParse(data);
return validatedData.data;
});
1条答案
按热度按时间uttx8gqw1#
从Firestore文档中了解其查询限制:
在复合查询中,范围(<,<=,>,>=)而不等于(!=,not-in)比较必须全部在同一字段上进行筛选。
考虑到这一点,Firestore查询不可能满足您的要求。最接近的方法是在数据库上执行一个范围过滤器,然后在代码中实现其余的过滤--但这几乎排除了对结果进行分页的可能性。
如果这是一个硬性要求,您将需要使用更适合这种类型查询的数据库。