Имеет ли значение порядок полей индекса Firestore? - PullRequest
3 голосов
/ 28 мая 2020

Для одной из своих коллекций я создал следующий индекс:

  • createdOn: отметка времени (по возрастанию)
  • ordinal: число (по возрастанию)
  • parent: ссылка (по возрастанию)

Однако, когда я запускаю запрос, который использует все три поля, firestore ничего не извлекает и вместо этого предлагает этот индекс ( последние два поля меняются местами ):

  • createdOn: отметка времени (по возрастанию)
  • parent: ссылка (по возрастанию)
  • ordinal: число (По возрастанию)

Я также пытался изменить порядок where* и orderBy в запросе, но это не помогло. Итак, теперь у меня есть два индекса, и я не понимаю, почему один из них не работает, а другой в порядке.

Зачем мне нужен другой индекс? документы не упоминают об этом (по крайней мере, здесь).


Я использую следующий запрос:


    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()
    }
...