gpt4 book ai didi

android - Firestore 索引字段顺序是否重要?

转载 作者:行者123 更新时间:2023-12-04 12:58:47 25 4
gpt4 key购买 nike

对于我的一个收藏,我创建了以下索引:

  • createdOn : 时间戳(升序)
  • ordinal : 数字(升序)
  • parent : 引用(升序)

  • 但是,当我运行使用所有三个字段的查询时,firestore 不会获取任何内容,而是建议使用此索引( 最后两个字段交换 ):
  • createdOn : 时间戳(升序)
  • parent : 引用(升序)
  • ordinal : 数字(升序)

  • 我还尝试更改 where* 的顺序和 orderBy在查询中,但它没有任何效果。所以,现在我有两个索引,不明白为什么其中一个不起作用而另一个很好。

    为什么我需要不同的索引? docs不要提及它(至少在这里)。

    我正在使用的查询是这个:

    private val firestore = FirebaseFirestore.getInstance()

    fun texts(languageId: String, storyId: String): Task<QuerySnapshot> {
    return firestore
    .collection("/languages/$languageId/texts")
    .whereIn("createdOn", dates) // <-- List<Timestamp>
    .whereEqualTo("parent", firestore.document("/languages/$languageId/stories/$storyId"))
    .orderBy("ordinal", Query.Direction.ASCENDING)
    .get()
    }

    最佳答案

    正如@MikeG 在评论中提到的,我可以确认 where 的序列字段不重要,但 orderBy字段必须始终位于最后。将索引分解为 2 个索引是一种很好的做法:

  • createdOn (升序), ordinal (升序)
  • 父(升序),序数(升序)

  • Firestore 会在查询时将它们合并在一起,这样既可以节省一些成本,也可以在不同的场景下重用索引。

    关于android - Firestore 索引字段顺序是否重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62059403/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com