gpt4 book ai didi

javascript - 如何修复动态排序时 onSnapshot : FirebaseError: The query requires an index. 中的未捕获错误?

转载 作者:行者123 更新时间:2023-11-29 22:46:22 24 4
gpt4 key购买 nike

我有一个查询,我在 desc 订单中使用如下查询

  const { id } = userDetails;
const initialQuery = await firestore().collection('class')
.orderBy('createdAt', 'desc')
.where(`access.readAccess.${id}`, '==', true)
.limit(5);
initialQuery.onSnapshot((documentSnapshots) => {
const { docs } = documentSnapshots;
const lastVisible = docs.length > 0 ? docs[docs.length - 1] : '';
console.log(docs);
})
const getMore = async(store, userDetails) => {
const { id } = userDetails;
const { lastVisible } = lastState;
const initialQuery = await firestore().collection('class')
.orderBy('createdAt', 'desc')
.where(`access.readAccess.${id}`, '==', true).startAfter(lastVisible)
.limit(5);
const documentSnapshots = await initialQuery.get();
const { docs } = documentSnapshots;
}

当我这样做时,我得到一个错误:The query requires an index 这看起来很公平,也有助于创建索引的 url。当我创建索引时,它会创建索引

class
access.readAccess.`1571158795762` Ascending createdAt Descending
Collection
Enabled

现在 1571158795762 将根据登录的用户不断变化。因此,当然,它开始提示其他用户。此外,onSnapshot 会按 desc 顺序调用。有什么建议吗?

最佳答案

Cloud Firestore 索引需要了解参与查询的所有特定字段。这就是它可以优化查询的方式。如果您的查询字段之一是动态命名的,例如您的 access.readAccess.${id},那么这种查询不太适合 Firestore。

解决此问题的唯一方法是以符合 Firestore 对索引的要求的方式重组数据。由于我们无法很好地了解您要存储的数据,因此不太可能给出可行的建议。但我要说的是,将 ID 移动到列表中并检查该列表以了解查询中是否存在 ID 可能会有所帮助。

关于javascript - 如何修复动态排序时 onSnapshot : FirebaseError: The query requires an index. 中的未捕获错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58400575/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com