繁体   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