我使用react从我的firestore集合中获取文档,当我获取文档时,我分配了一个条件查询,查询方向根据提供的值而改变。
const getData = async () => {
const constraints = [];
if (price)
constraints.push(orderBy("price", price == "1" ? "desc" : "asc"));
if (date)
constraints.push(orderBy("postedDate", date == "1" ? "desc" : "asc"));
if (type)
constraints.push(orderBy("type", type == "1" ? "desc" : "asc"));
// there are more conditional queries here. 8 more to be exact
const livings = collection(db, "livingPosts");
let q = query(livings, ...constraints);
const qSnapshot = await getDocs(q);
const dataQ = qSnapshot.docs.map((doc) => ({
...doc.data(),
id: doc.id,
}));
// console.log(dataQ);
setDatas(dataQ);
};
useEffect(() => {
getData();
}, []);
正如你在上面的代码中看到的,我已经实现了条件查询.并且还有更多的查询我没有包括.所以我的问题是,我怎样才能为所有这些查询创建索引?
我用firebase提供给我的链接创建了索引。但是它让我为2个查询创建了4个复合索引。(价格和日期),顺序是
price - asc , date - asc
price - desc , date - asc
price - asc , date - desc
price - desc , date - asc
这些是索引.所以我必须创建每一个可能的索引象这些吗?如果是这样的话,我必须做的组合的数目和索引的最大数目是200.请告诉我正确的方法
1条答案
按热度按时间cld4siwp1#
那么我是否必须创建所有可能的索引
是的,您需要创建与应用可能执行的查询相对应的所有索引。
为此,您可以使用错误消息中显示的URL(这意味着您需要执行所有可能的查询,即播放所有场景),或者您可以使用Firebase(或Google Cloud)控制台手动构建它们。
对于默认的最大200个复合索引的限制,您实际上可以联系Firebase support,要求增加这个最大数目。