我正在使用Firestore作为数据库。我希望使用一个变量过滤数据,然后使用第二个变量按时间顺序对其进行排序。
我要尝试实现的代码如下:
firebase.firestore().collection('supervisorRequests')
.where("supervisor", "==", this.props.currentUID)
.orderBy("postDate", "desc")
对于上面的代码,我得到以下输出:
Firestore:操作被拒绝,因为系统未处于执行操作所需的状态。(firestore / failed-precondition)
如果我从查询中删除.orderBy
或.where
,问题就消失了。
问题的原因是什么?为什么不能同时使用两个“过滤器”?如何以我请求的方式获取数据,并避免不得不手动对数据进行排序?
答案 0 :(得分:0)
有时候我对您的情况有这种错误:在一个字段中执行 orderby ,在另一个字段中执行 where 。
一种对我有用的解决方案(尝试使用android studio)是创建索引。要知道到该特定索引的相对链接,请在终端中使用以下命令:
adb logcat
它将显示日志。您可以使用“ crtl + c”取消此命令,然后向上滚动一点,您将在其中看到要使用的确切链接。您复制此链接并将其粘贴到浏览器中。但是您必须先在Firebase控制台中进行身份验证。然后将出现一个模态询问您是否要创建此索引:您接受。
或者,如果您愿意,可以直接在firebase控制台中手动创建此索引。 Manage indexes in Cloud Firestore