簡體   English   中英

快照偵聽器中未捕獲的錯誤:FirebaseError:找不到匹配的索引

[英]Uncaught Error in snapshot listener: FirebaseError: no matching index found

運行以下查詢時出現上述錯誤。 我以前沒有見過它,找不到任何關於它的文檔,而且我沒有做任何不尋常的事情或我以前沒有做過的任何事情。 任何人都可以對此有所了解嗎?

const getUserProjects = async () => {
    return await useFireStore
    .collection('projects')
    .where('paid','==',true)
    .where('ownerId','==', `${currentUser.uid}`)
    .orderBy('createdAt', 'desc')
    .onSnapshot(snapshot => {
        let projects = [];
        snapshot.forEach(doc => {
            projects.push({...doc.data(), id: doc.id })
        });
        setUserProjects(projects);
    });
};

這是一個“新”查詢,因為我剛剛將它添加到代碼中,所以我可能期望控制台中的錯誤提供了一個鏈接,用於創建一個新的復合索引或任何它被調用的名稱,但我只是得到這個:

Firestore 控制台錯誤

編輯:我嘗試手動創建索引,但仍然遇到相同的錯誤。 我也在同一頁面上得到了一個查詢,除了集合名稱之外,它完全相同,並且工作正常。

這是 SDK 中的內部錯誤。

Firebase 團隊正在研究它,請在此處關注問題。

這是客戶端 SDK的一個已知問題 但是,Admin SDK 仍然照常工作,並返回一個包含創建索引鏈接的錯誤,可以用作解決方法。 只需通過 Admin SDK 在本地使用 Firebase Functions Emulator。

使用現有的 Firebase 項目或為此創建一個新項目:

firebase init functions

復制以下函數:

export const getIndexLink = functions.https.onRequest(async (request, response) => {
    try {
        const snap = await admin.firestore()...get()
        // Paste your query here
        response.send(snap.size, "matched documents");
    } catch (error) {
        console.log(error)
        response.send(error.message)
        // This error will contain the index creation link
    }
});

運行函數模擬器:

firebase emulators:start --only functions

打開瀏覽器並粘貼您的getIndexLink函數的 URL,您應該擁有在那里創建索引的 URL。

問題是您必須在雲 Firestore 的索引列中為“where”和“orderBy”條件創建索引。

官方文檔:

  1. 管理 Cloud Firestore 中的索引
  2. 指數和定價

您必須從 Firestore 控制台手動創建一個新索引

  1. 轉到 Firebase 控制台的 Cloud Firestore 部分。
  2. 轉至索引選項卡,然后單擊添加索引。
  3. 輸入集合的名稱並設置要用於對索引進行排序的字段。
  4. 單擊創建。

更多信息: https : //firebase.google.com/docs/firestore/query-data/indexing?authuser=0#create_a_missing_index_through_an_error_message

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM