【问题标题】:Firestore whereEqualTo, orderBy and limit(1) not workingFirestore whereEqualTo、orderBy 和 limit(1) 不起作用
【发布时间】:2018-10-22 15:19:41
【问题描述】:

我想查询我的锻炼收藏以获取例行程序中的最新锻炼。这意味着我使用whereEqualTo 我的routineKey 进行查询,按Started TimeStamp 以降序对其进行排序,然后限制为1,然后获取锻炼的第一个Key/Id。

但是这不起作用。 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
                }
            });

【问题讨论】:

    标签: java android firebase google-cloud-firestore


    【解决方案1】:

    除非您为其创建index,否则此查询将不起作用。这可以通过在您的 Firebase Console 中手动创建来完成,或者如果您使用的是 Android Studio,您会在 logcat 中找到一条听起来像这样的消息:

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

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

    【讨论】:

    • 感谢您的回答!没有收到 LogCat 消息,但我手动创建了一个索引,它可以工作。
    • FirebaseFirestore.instance .collection('messages') .where('encSenderUId', isEqualTo: _loggedInUserId) .orderBy('sentOn', descending: false) .snapshots(), 我想做orderBy通过SentOn 字段,而不是 encSenderUId 那么为什么 firebase 控制台说 encSenderUId 通过提供链接来索引。有点奇怪。请建议。谢谢。
    • @Kamlesh 没有看到整个代码,我帮不上什么忙。因此,请使用自己的MCVE 发布一个新问题,以便我和其他 Firebase 开发人员可以帮助您。
    • 我已经为它创建了索引并且它有效。这很奇怪,但我确实解决了这个问题。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    相关资源
    最近更新 更多