bounty还有4天到期。此问题的答案有资格获得+50声望奖励。Jul Pod正在寻找一个规范答案。
我有以下代码来使用过滤器查询属性(分页):
const propertyCollectionRef = db.collection('properties')
let queryRef = propertyCollectionRef;
let query: any = db.collection('properties');
if (filters) {
for (const [key, value] of Object.entries(filters)) {
if (key !== 'page') {
switch (key) {
case "price":
query = query.where(key, '<=', parseInt(value));
break;
case "bathrooms":
query = query.where(key, '==', parseInt(value));
break;
case "beds":
query = query.where(key, '==', parseInt(value));
break;
case "min-area":
query = query.where("area", '>=', parseInt(value));
break;
case "max-area":
query = query.where("area", '<=', parseInt(value));
break;
case "typ":
query = query.where(key, '==', value);
break;
default:
query = query.where(key, '==', value);
break;
}
}
}
}
const offset = (page - 1) * pageSize
const querySnapshot = await query
.limit(pageSize)
.offset(offset).get();
firebase希望我为每个查询组合创建一个索引(
code: 9,
details: 'The query requires an index. You can create it here:...
),例如,我需要创建一个用于过滤price
和type
。而且在对price
、type
和bathrooms
进行滤波时也是一个
怎么可能让它更“通用”-我想不出firebase能让它变得如此复杂…
1条答案
按热度按时间bksxznpy1#
Firebase希望我为每个查询组合创建一个索引。
Cloud Firestore通过要求每个查询都有索引来保证查询性能。最基本的查询所需的索引将自动为您创建。你什么都不用做。但是,对于像您这样的更复杂的查询,需要索引。需要注意的一点是,您最多可以创建200个索引。如果您需要超过200个,那么您可以联系Firebase Support请求增加此限制。
除此之外,indexes are created automatically。因此,像你这样的查询不能在没有创建索引的情况下工作。
索引是自动创建的,但仍然需要我点击链接。
是的.如果您不想通过单击URL或直接在Firebase控制台中创建索引来自己执行此操作,则应考虑使用Firebase CLI。这使您可以非常轻松地使用Firebase CLI部署索引。
真的是这样吗?大多数查询只使用一个范围过滤器,其余的都在客户端进行?
对于这样的查询,是的,这里是Firestore中所有查询限制的列表。