我正在使用Firestore构建一个应用程序,遇到了一个涉及子字段的查询问题。
我添加了一个搜索功能,允许用户根据各种标准过滤文章,比如年份、季节、流派和工作室。
为了实现这个特性,我使用了一个Firestore数据库和一个查询函数,该函数接受搜索词和过滤器作为输入,并返回匹配文章的列表。
具体来说,我试图查询文档的genres和studios子字段,但是当我运行查询时,我得到一条错误消息,内容是:
Firebase错误:查询需要索引。
我创建了一个函数来生成查询,然后在getData(q)函数中使用它。
export function generateSearchQuery(
searchTerms: string,
filters: {
year: number | "";
season: string;
genre: string;
studio: string;
}
): Query<DocumentData> {
const docRef = collection(firestore, "example");
let q = query(docRef);
if (searchTerms) q = query(q, where("title", "==", searchTerms));
if (filters.year) q = query(q, where("year", "==", filters.year));
if (filters.season) q = query(q, where("season", "==", filters.season));
if (filters.genre) q = query(q, where(`genres.${filters.genre}`, "==", true));
if (filters.studio)
q = query(q, where(`studios.${filters.studio}`, "==", true));
q = query(q, orderBy("id", "desc"), limit(20)); //id is needed, for fetching more by using startAfter() function
return q;
}
我认为这是不可能的,以创造复合指数与工作室和流派,因为有无限的模式,例如。类型。动作类型。喜剧等等。
例如,
"studios": {
"Studio A": true,
"Studio B": true,
"Studio C": true
},
"genres": {
"Action": true,
"Comedy": true,
"Drama": true,
"Sci-Fi": true
}
有人能帮我弄清楚如何创建我需要的综合指数吗?任何帮助将不胜感激。谢谢你!
1条答案
按热度按时间g6baxovj1#
我只发现了这个方法,
创建一些合并关键字
虚拟示例
生成一些关键字,创建一个新的项目“关键字”来存储这个arr。
生成目标
最后,