Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何修复onSnapshot:FirebaseError中的未捕获错误:查询需要索引。关于动态排序?_Javascript_Firebase_Google Cloud Firestore - Fatal编程技术网

Javascript 如何修复onSnapshot:FirebaseError中的未捕获错误:查询需要索引。关于动态排序?

Javascript 如何修复onSnapshot:FirebaseError中的未捕获错误:查询需要索引。关于动态排序?,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,我有一个查询,按照desc顺序查询,使用如下方法 const { id } = userDetails; const initialQuery = await firestore().collection('class') .orderBy('createdAt', 'desc') .where(`access.readAccess.${id}`, '==', true) .limit(5); initialQuery.onSnapshot((document

我有一个查询,按照
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);
  })
当我这样做时,我得到了一个错误
,查询需要一个索引
,这似乎是公平的,也是创建索引的有用url。当我创建索引时,它会创建

class
access.readAccess.`1571158795762` Ascending createdAt Descending
Collection
Enabled
现在,此
1571158795762
将根据登录的用户不断更改。所以,当然,它开始抱怨另一个用户。而且,
onSnapshot
不会使用
desc
order调用。
有什么建议吗

云Firestore索引需要知道参与查询的所有特定字段。这就是它如何优化查询的方法。如果其中一个查询字段是动态命名的,例如
access.readAccess.${id}
,则这种查询不适合Firestore


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

是的,我在发布问题后立即发布了这个消息。谢谢你的确认。以防有人遇到类似的问题,我试图查看用户的读取权限,如果他有访问权限,则显示这些数据,这是一个具有userId键和true值的对象。我切换到一个数组,并将查询切换到
。其中('access.readAccess','array contains',id)
,运行得非常顺利。很高兴您能正常工作。如果我的回答有帮助,请注明正确。
class
access.readAccess.`1571158795762` Ascending createdAt Descending
Collection
Enabled