Firestore whereEqualTo, orderBy and limit(1) 不工作

我想查询我的体能训练集合,以获取例程中的最新体能训练。这意味着我使用我的例程Key进行查询,按开始时间戳降序排序,然后限制为1,然后取锻炼的第一个键/ID。whereEqualTo

但是,这不起作用。 并单独工作,但不合并。我做错了什么?whereEqualToorderBy

fm.getColRefWorkout().whereEqualTo("routineKey", routineKey).orderBy("startTimeStamp", Query.Direction.DESCENDING).limit(1).get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() { 
                @Override
                public void onSuccess(QuerySnapshot documentSnapshots) {
                    workoutKey = documentSnapshots.getDocuments().get(0).getId();
                    //To stuff with this workoutKey
                }
            });

答案 1

除非为此查询创建索引,否则此查询将不起作用。这可以通过在Firebase控制台中手动创建来完成,或者如果您使用的是Android Studio,您将在logcat中找到一条消息,如下所示:

FAILED_PRECONDITION: The query requires an index. You can create it here: ...

您只需单击该链接或将URL复制并粘贴到Web浏览器中,您的索引将自动创建。


答案 2

推荐