【问题标题】:Sort document by integer Firestore Kotlin按整数 Firestore Kotlin 对文档进行排序
【发布时间】:2020-05-26 10:58:22
【问题描述】:

我想按img 降序对文档进行排序。 我试图在 firebase 控制台中添加索引。这是索引选项卡的屏幕截图:

这是我的数据库结构:

这是我的代码:

db.collection("images").whereEqualTo("user", uid).orderBy("img", Query.Direction.DESCENDING).get()
    .addOnSuccessListener {
        if (it.isEmpty) {
            Log.i("Image", "Sorry, no image")
        } else {
            for (task in it) {
                Log.i("Image", task.get("img").toString())
            }
        }
    }

这里是日志:

I/Image: 2
I/Image: 1
I/Image: 3
I/Image: 4
I/Image: 6
I/Image: 7

我做错了什么?

【问题讨论】:

  • 请编辑您的问题并将您的数据库结构添加为屏幕截图。
  • 你检查过这个吗? firebase.google.com/docs/database/android/… 看来您的订单功能没有正确使用。还要确保您在上面用于订购的任何内容都与您创建的索引类型相匹配,如此处所述firebase.google.com/docs/database/security/indexing-data 在不了解您拥有的图像中的文本(看起来像俄语)的情况下,您似乎需要根据价值或在孩子身上。
  • 这是一个实时数据库的文档,我使用 Cloud Firestore。

标签: firebase kotlin google-cloud-firestore


【解决方案1】:

请注意,如 documentation 所述,您遇到的行为背后可能有两种解释:

  1. 如果您有一个具有范围比较(、>=)的过滤器,则您的第一个排序必须在同一字段中

  2. 您不能按等式 (=) 或 in 子句中包含的任何字段对查询进行排序。

基于文档中提供的以下 sn-p:

citiesRef.whereGreaterThan("population", 100000).orderBy("population").limit(2)

您可以尝试以下方法(但我不确定它是否会因为 2.):

db.collection("images").whereEqualTo("user", uid).orderBy("user").orderBy("img", Query.Direction.DESCENDING).get()
    .addOnSuccessListener {
        if (it.isEmpty) {
            Log.i("Image", "Sorry, no image")
        } else {
            for (task in it) {
                Log.i("Image", task.get("img").toString())
            }
        }
    }

【讨论】:

    猜你喜欢
    • 2019-03-03
    • 1970-01-01
    • 2018-09-21
    • 2020-07-05
    • 1970-01-01
    • 2017-12-16
    • 2012-11-29
    • 2021-09-10
    • 1970-01-01
    相关资源
    最近更新 更多