我接近超過 firebase 的配額限制指數。所以我正在嘗試優化它。目前,我使用物件的技巧來使用過濾器來獲取它。示例:我的查詢:
query = query.where(`genres.${genre}`, '==', true);
query = query.where(`languages.${lang}`, '==', true)
我的物件:
[
{
id: 1,
genres: {
drama: true,
comedy: true
},
languages: {
en: true,
},
{
id: 2,
genres: {
animation: true,
action: true,
comedy: true,
drama: true,
},
languages: {
en: true,
fr: true,
},
}
]
我不知道條目的數量可以有流派或語言。因此,對于每種情況,我都會創建一個新索引。我接近200指數。
我試影像這樣使用比較器'==':
const genresSelected = ['drama', 'comedy'];
let genreObject = {};
for (let genre of genresSelected) {
genreObject[genre] = true;
query = query.where('genres', '==', genreObject);
}
所以這將按流派 === 過濾,{ drama: true, 'comedy': true }這將找到我的第一個專案,但不是我的第二個專案。我想知道屬性是否存在于流派/語言中,而不是嚴格檢查。
uj5u.com熱心網友回復:
我建議添加一個包含所有當前型別的陣列欄位:
presentGenres: ['animation', 'action', 'comedy', 'drama']
使用該新欄位,您可以使用它array-contains來查詢單個特定值:
query.where('presentGenres', 'array-contains', 'drama')
這個 ?? 查詢將選擇"drama"其presentGenres欄位中的所有檔案,無論那里有什么其他值。
不幸的是,這個presentGenres欄位只允許指定一個值。沒有回傳陣列包含多個值的操作。正如您所發現的,要使用該==操作,您必須指定陣列或映射中的所有值。
因此,如果您想選擇多個但不是所有型別,則需要保留地圖(以及所有單獨的索引),然后您可以使用:
query
.where('genres.drama', '==', true)
.where('genres.comedy', '==', true)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/492823.html
